A Golang library for server client communication, uses gRPC under the hood.
- Dynamically add/change RPC methods (SetCommandHandler)
- User defined authentication and authorization (using OnConnect event)
- Detect and handle disconnects (OnDisconnect event)
- Transmitts and receives strings/serialized data only.
- Uses bidirectional gRPC stream under the hood.
funcmain() {
// Instantiate the servers:=server.New("localhost:1234")
// Define event handlerseventChan:=make(chanstring, 5)
s.SetOnConnect(func(s*server.Server, clientIdstring) {
eventChan<-"a client disconnected "+clientId
})
s.SetOnDisconnect(func(s*server.Server, clientIdstring) {
eventChan<-"a client disconnected "+clientId
})
// Define command handlerss.SetCommandHandler("client id 123", "command_1", func(s*server.Server, clientIdstring, argstring) {
eventChan<-"command received: "+clientId+" -- "+arg// handle the command..// ..// Can respond to client:s.Send(clientId, "response_command_known_at_client", "cmdArg")
}
// Start servergos.Start()
forin:=rangeeventChan {
log.Println("server received: ", in)
}
}funcmain() {
// Instantiate clientc:=client.New("client id 123", ":1234")
// Set event handlersc.SetOnConnect(func(c*client.Client) { log.Println("connected!") })
c.SetOnDisconnect(func(c*client.Client) { log.Println("disconnected!") })
// Set command handlersc.SetCommandHandler("response", func(c*client.Client, argstring) {
log.Println("received command from server , ", arg)
// handle command// ...// Can respond to serverc.Send("command_1", "arguments")
})
// connect to serverc.Start()
c.Send("test_command", "client is sending this command")
<-time.After(time.Second*5)
}MIT