Skip to content

Commit

Permalink
other: v2 vivid 体验优化
Browse files Browse the repository at this point in the history
  • Loading branch information
kercylan98 committed Jun 5, 2024
1 parent 5196791 commit 9d1280d
Show file tree
Hide file tree
Showing 12 changed files with 310 additions and 36 deletions.
10 changes: 6 additions & 4 deletions minotaur/application.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ import (
"syscall"
)

func NewApplication(name string, options ...Option) *Application {
actorSystem := vivid.NewActorSystem(name)
eventBus := pulse.NewPulse(&actorSystem, vivid.NewActorOptions[*pulse.EventBusActor]().WithName("event_bus"))
func NewApplication(options ...Option) *Application {
opts := new(Options).apply(options...)

actorSystem := vivid.NewActorSystem(opts.ActorSystemName)
eventBus := pulse.NewPulse(&actorSystem, vivid.NewActorOptions[*pulse.EventBusActor]().WithName(opts.EventBusActorName))
ctx, cancel := context.WithCancel(actorSystem.Context())
return &Application{
options: new(Options).apply(options...),
options: opts,
ctx: ctx,
cancel: cancel,
closed: make(chan struct{}),
Expand Down
19 changes: 18 additions & 1 deletion minotaur/application_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,23 @@ func (e *AccountManager) onConnOpened(ctx vivid.MessageContext, message transpor
vivid.ActorOf[*Account](e.ActorSystem(), vivid.NewActorOptions[*Account]().WithInit(func(account *Account) {
account.ConnActor = message.ConnActor
}))

vivid.ActorOfF[*Account](e.ActorSystem(), func(options *vivid.ActorOptions[*Account]) {
options.
WithName("account").
WithInit(func(account *Account) {
account.ConnActor = message.ConnActor
})
})

vivid.ActorOfI(e.ActorSystem(), new(Account), func(options *vivid.ActorOptions[*Account]) {
options.
WithName("account").
WithInit(func(account *Account) {
account.ConnActor = message.ConnActor
})
})

}

type Account struct {
Expand All @@ -40,7 +57,7 @@ func (c *Account) OnReceive(ctx vivid.MessageContext) {
}

func TestNewApplication(t *testing.T) {
app := minotaur.NewApplication("test", minotaur.WithNetwork(network.WebSocket(":9988")))
app := minotaur.NewApplication(minotaur.WithNetwork(network.WebSocket(":9988")))
vivid.ActorOf[*AccountManager](app.ActorSystem(), vivid.NewActorOptions[*AccountManager]().WithInit(func(manager *AccountManager) {
manager.Application = app
}))
Expand Down
14 changes: 14 additions & 0 deletions minotaur/logger/logger.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package logger

import (
"github.com/kercylan98/minotaur/minotaur/vivid"
"github.com/kercylan98/minotaur/toolkit/log"
)

type Actor struct {
*log.Logger
}

func (a *Actor) OnReceive(ctx vivid.MessageContext) {

}
33 changes: 30 additions & 3 deletions minotaur/options.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,49 @@
package minotaur

import "github.com/kercylan98/minotaur/minotaur/transport"
import (
"github.com/kercylan98/minotaur/minotaur/transport"
)

type Option func(*Options)

type Options struct {
Network transport.Network // 网络
ActorSystemName string // Actor 系统名称
EventBusActorName string // 事件总线 Actor 名称
Network transport.Network // 网络
}

// defaultApply 设置缺省值
func (o *Options) defaultApply() *Options {
if o.ActorSystemName == "" {
o.ActorSystemName = "minotaur"
}
if o.EventBusActorName == "" {
o.EventBusActorName = "event_bus"
}
return o
}

func (o *Options) apply(options ...Option) *Options {
for _, option := range options {
option(o)
}
return o
return o.defaultApply()
}

func WithNetwork(network transport.Network) Option {
return func(o *Options) {
o.Network = network
}
}

func WithActorSystemName(name string) Option {
return func(o *Options) {
o.ActorSystemName = name
}
}

func WithEventBusActorName(name string) Option {
return func(o *Options) {
o.EventBusActorName = name
}
}
4 changes: 3 additions & 1 deletion minotaur/transport/conn_actor.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,15 @@ type ConnActor struct {
func (c *ConnActor) OnReceive(ctx vivid.MessageContext) {
switch ctx.GetMessage().(type) {
case vivid.OnPreStart:
c.reader = ctx.GetReceiver()
c.reader = ctx.GetRef()
c.writer = vivid.ActorOf[*ConnWriteActor](c.server, vivid.NewActorOptions[*ConnWriteActor]().WithConstruct(func() *ConnWriteActor {
return &ConnWriteActor{
conn: c.conn,
writer: c.connWriter,
}
}()))
case ConnReceivePacketMessage:

}
}

Expand Down
4 changes: 2 additions & 2 deletions minotaur/transport/server_actor.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ func (s *ServerActor) OnReceive(ctx vivid.MessageContext) {

func (s *ServerActor) onPreStart(ctx vivid.MessageContext) {
s.connections = make(map[net.Conn]*ConnActor)
s.actor = ctx.GetReceiver()
s.core = new(serverCore).init(ctx.GetReceiver())
s.actor = ctx.GetRef()
s.core = new(serverCore).init(ctx.GetRef())
}

func (s *ServerActor) onServerLaunch(ctx vivid.MessageContext, m ServerLaunchMessage) {
Expand Down
2 changes: 1 addition & 1 deletion minotaur/transport/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ type AccountManager struct {
func (e *AccountManager) OnReceive(ctx vivid.MessageContext) {
switch m := ctx.GetMessage().(type) {
case vivid.OnPreStart:
e.eventBus.Subscribe(pulse.SubscribeId(ctx.GetReceiver().Id()), ctx.GetReceiver(), transport.ServerConnOpenedEvent{})
e.eventBus.Subscribe(pulse.SubscribeId(ctx.GetRef().Id()), ctx.GetRef(), transport.ServerConnOpenedEvent{})
case transport.ServerConnOpenedEvent:
vivid.ActorOf[*Conn](ctx, vivid.NewActorOptions[*Conn]().WithInit(func(conn *Conn) {
conn.ConnActor = m.ConnActor
Expand Down
2 changes: 1 addition & 1 deletion minotaur/vivid/actor_system.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ func (s *ActorSystem) onProcessServerMessage(bytes []byte) {

func (s *ActorSystem) onProcessMailboxMessage(message MessageContext) {
// received message
core := message.GetReceiver().(*_LocalActorRef).core
core := message.GetRef().(*_LocalActorRef).core
defer func() {
core.messageGroup.Done()
if r := recover(); r != nil {
Expand Down
21 changes: 14 additions & 7 deletions minotaur/vivid/message_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ type MessageContext interface {
// GetSender 获取消息的发送者
GetSender() ActorRef

// GetReceiver 获取消息的接收者
GetReceiver() ActorRef
// GetRef 获取上下文的 ActorRef
GetRef() ActorRef

// GetMessage 获取消息内容
GetMessage() Message
Expand All @@ -39,6 +39,9 @@ type MessageContext interface {

// BindBehavior 该函数是 ActorContext.BindBehavior 的快捷方式
BindBehavior(behavior Behavior)

// UnbindBehavior 该函数是 ActorContext.UnbindBehavior 的快捷方式
UnbindBehavior(message Message)
}

func newMessageContext(system *ActorSystem, message Message, priority int64, instantly, hasReply bool) *_MessageContext {
Expand Down Expand Up @@ -79,19 +82,19 @@ type _MessageContext struct {
}

func (c *_MessageContext) Id() ActorId {
return c.GetReceiver().Id()
return c.GetRef().Id()
}

func (c *_MessageContext) Tell(msg Message, opts ...MessageOption) {
c.GetReceiver().Tell(msg, opts...)
c.GetRef().Tell(msg, opts...)
}

func (c *_MessageContext) Ask(msg Message, opts ...MessageOption) Message {
return c.GetReceiver().Ask(msg, opts...)
return c.GetRef().Ask(msg, opts...)
}

func (c *_MessageContext) send(ctx MessageContext) {
c.GetReceiver().send(ctx)
c.GetRef().send(ctx)
}

func (c *_MessageContext) Deadline() (deadline time.Time, ok bool) {
Expand Down Expand Up @@ -170,7 +173,7 @@ func (c *_MessageContext) GetSender() ActorRef {
return c.sender
}

func (c *_MessageContext) GetReceiver() ActorRef {
func (c *_MessageContext) GetRef() ActorRef {
if c.actorContext != nil {
return c.actorContext.(*_ActorCore)._LocalActorRef
}
Expand Down Expand Up @@ -237,3 +240,7 @@ func (c *_MessageContext) Instantly() bool {
func (c *_MessageContext) BindBehavior(behavior Behavior) {
c.GetContext().BindBehavior(behavior)
}

func (c *_MessageContext) UnbindBehavior(message Message) {
c.GetContext().UnbindBehavior(message)
}
16 changes: 0 additions & 16 deletions minotaur/vivid/test/main.go
Original file line number Diff line number Diff line change
@@ -1,17 +1 @@
package main

import (
"fmt"
vivid "github.com/kercylan98/minotaur/vivid"
)

type TestFreeActor struct {
name string
}

func main() {
system := vivid.NewActorSystem("test-system")

system.Shutdown()
fmt.Println("System shutdown")
}
16 changes: 16 additions & 0 deletions minotaur/vivid/vivid.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,22 @@ func BehaviorOf[T Message](handler func(ctx MessageContext, message T)) Behavior
return adp
}

func ActorOfI[T Actor](actorOf actorOf, actor T, options ...func(options *ActorOptions[T])) ActorRef {
var opts = NewActorOptions[T]().WithConstruct(actor)
for _, opt := range options {
opt(opts)
}
return ActorOf(actorOf, opts)
}

func ActorOfF[T Actor](actorOf actorOf, options ...func(options *ActorOptions[T])) ActorRef {
var opts = NewActorOptions[T]()
for _, opt := range options {
opt(opts)
}
return ActorOf(actorOf, opts)
}

func ActorOf[T Actor](actorOf actorOf, options ...*ActorOptions[T]) ActorRef {
var opts = parseActorOptions(options...)
var ins = opts.Construct
Expand Down
Loading

0 comments on commit 9d1280d

Please sign in to comment.