github.com/qiuhoude/go-web@v0.0.0-20220223060959-ab545e78f20d/prepare/23_proto_actor/chat/client/main.go (about) 1 package main 2 3 import ( 4 "log" 5 6 console "github.com/AsynkronIT/goconsole" 7 "github.com/AsynkronIT/protoactor-go/actor" 8 "github.com/AsynkronIT/protoactor-go/examples/chat/messages" 9 "github.com/AsynkronIT/protoactor-go/remote" 10 ) 11 12 func main() { 13 remote.Start("127.0.0.1:0") 14 15 server := actor.NewPID("127.0.0.1:8080", "chatserver") 16 17 // define root context 18 rootContext := actor.EmptyRootContext 19 20 // spawn our chat client inline 21 props := actor.PropsFromFunc(func(context actor.Context) { 22 switch msg := context.Message().(type) { 23 case *messages.Connected: 24 log.Println(msg.Message) 25 case *messages.SayResponse: 26 log.Printf("%v: %v", msg.UserName, msg.Message) 27 case *messages.NickResponse: 28 log.Printf("%v is now known as %v", msg.OldUserName, msg.NewUserName) 29 } 30 }) 31 32 client := rootContext.Spawn(props) 33 34 rootContext.Send(server, &messages.Connect{ 35 Sender: client, 36 }) 37 38 nick := "Roger" 39 cons := console.NewConsole(func(text string) { 40 rootContext.Send(server, &messages.SayRequest{ 41 UserName: nick, 42 Message: text, 43 }) 44 }) 45 // write /nick NAME to change your chat username 46 cons.Command("/nick", func(newNick string) { 47 rootContext.Send(server, &messages.NickRequest{ 48 OldUserName: nick, 49 NewUserName: newNick, 50 }) 51 nick = newNick 52 }) 53 cons.Run() 54 }