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  }