本文整理汇总了Golang中github.com/davyxu/cellnet/socket.RegisterSessionMessage函数的典型用法代码示例。如果您正苦于以下问题:Golang RegisterSessionMessage函数的具体用法?Golang RegisterSessionMessage怎么用?Golang RegisterSessionMessage使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RegisterSessionMessage函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: client
// 客户端
func client() {
pipe := cellnet.NewEventPipe()
evq := socket.NewConnector(pipe).Start("127.0.0.1:7101")
socket.RegisterSessionMessage(evq, coredef.SessionConnected{}, func(content interface{}, ses cellnet.Session) {
ack := &coredef.TestEchoACK{
Content: proto.String("hello"),
}
ses.Send(ack)
log.Printf("client send: %s\n", ack.String())
})
socket.RegisterSessionMessage(evq, coredef.TestEchoACK{}, func(content interface{}, ses cellnet.Session) {
msg := content.(*coredef.TestEchoACK)
log.Println("client recv:", msg.String())
done <- true
})
pipe.Start()
<-done
}
示例2: client
// 客户端
func client() {
pipe := cellnet.NewEventPipe()
evq := socket.NewConnector(pipe).Start("127.0.0.1:7101")
socket.RegisterSessionMessage(evq, "coredef.SessionConnected", func(content interface{}, ses cellnet.Session) {
signal.Done(1)
ack := &coredef.TestEchoACK{
Content: "hello",
}
ses.Send(ack)
log.Debugf("client send: %s\n", ack.String())
})
socket.RegisterSessionMessage(evq, "coredef.TestEchoACK", func(content interface{}, ses cellnet.Session) {
msg := content.(*coredef.TestEchoACK)
log.Debugln("client recv:", msg.String())
signal.Done(3)
})
pipe.Start()
signal.WaitAndExpect(1, "not connceted to router")
signal.WaitAndExpect(2, "not recv client msg")
signal.WaitAndExpect(3, "not recv server msg")
}
示例3: client
func client() {
pipe := cellnet.NewEventPipe()
evq := socket.NewConnector(pipe).Start("127.0.0.1:7201")
socket.RegisterSessionMessage(evq, "gamedef.TestEchoACK", func(content interface{}, ses cellnet.Session) {
msg := content.(*gamedef.TestEchoACK)
log.Debugln("client recv:", msg.String())
signal.Done(1)
})
socket.RegisterSessionMessage(evq, "gamedef.SessionConnected", func(content interface{}, ses cellnet.Session) {
ses.Send(&gamedef.TestEchoACK{
Content: "hello",
})
})
pipe.Start()
signal.WaitAndExpect(1, "not recv data")
}
示例4: connClose
// 客户端连接上后, 主动断开连接, 确保连接正常关闭
func connClose() {
pipe := cellnet.NewEventPipe()
p := socket.NewConnector(pipe).Start("127.0.0.1:7235")
socket.RegisterSessionMessage(p, coredef.SessionConnected{}, func(ses cellnet.Session, content interface{}) {
// 连接上发包,告诉服务器不要断开
ses.Send(&coredef.TestEchoACK{
Content: proto.String("noclose"),
})
})
socket.RegisterSessionMessage(p, coredef.TestEchoACK{}, func(ses cellnet.Session, content interface{}) {
msg := content.(*coredef.TestEchoACK)
log.Println("client recv:", msg.String())
done <- 1
// 客户端主动断开
ses.Close()
})
socket.RegisterSessionMessage(p, coredef.SessionClosed{}, func(ses cellnet.Session, content interface{}) {
log.Println("close ok!")
// 正常断开
done <- 2
})
pipe.Start()
// 收到回包
if <-done != 1 {
log.Panicln("test failed, not recv msg")
}
// 断开正常
if <-done != 2 {
log.Panicln("test failed, not close")
}
fmt.Println("connected close test done!")
}
示例5: client
func client() {
pipe := cellnet.NewEventPipe()
p := socket.NewConnector(pipe)
p.SetName("client")
p.Start("127.0.0.1:9201")
socket.RegisterSessionMessage(p, "gamedef.SessionConnected", func(content interface{}, ses cellnet.Session) {
rpc.Call(p, &gamedef.TestEchoACK{
Content: "rpc async call",
}, func(msg *gamedef.TestEchoACK) {
log.Debugln("client recv", msg.Content)
signal.Done(1)
})
})
pipe.Start()
signal.WaitAndExpect(1, "not recv data")
}
示例6: StartGateConnector
func StartGateConnector(pipe cellnet.EventPipe, addressList []string) {
gateConnArray = make([]cellnet.Peer, len(addressList))
for index, addr := range addressList {
conn := socket.NewConnector(pipe).Start(addr)
gateConnArray[index] = conn
gateIndex := new(int)
*gateIndex = index
// 广播
socket.RegisterSessionMessage(conn, coredef.UpstreamACK{}, func(content interface{}, ses cellnet.Session) {
msg := content.(*coredef.UpstreamACK)
// 生成派发的消息
// TODO 用PostData防止多重嵌套?
// 调用已注册的回调
conn.CallData(&relayEvent{
SessionEvent: socket.NewSessionEvent(msg.GetMsgID(), ses, msg.Data),
ClientID: msg.GetClientID(),
})
})
}
}
示例7: server
func server() {
pipe := cellnet.NewEventPipe()
qpsm := benchmark.NewQPSMeter(pipe, func(qps int) {
log.Infof("QPS: %d", qps)
})
evq := socket.NewAcceptor(pipe).Start(benchmarkAddress)
socket.RegisterSessionMessage(evq, "gamedef.TestEchoACK", func(content interface{}, ses cellnet.Session) {
if qpsm.Acc() > benchmarkSeconds {
signal.Done(1)
log.Infof("Average QPS: %d", qpsm.Average())
}
ses.Send(&gamedef.TestEchoACK{})
})
pipe.Start()
}
示例8: runServer
func runServer() {
pipe := cellnet.NewEventPipe()
p := socket.NewAcceptor(pipe).Start("127.0.0.1:7235")
// 计数器, 应该按照connCount倍数递增
var counter int
socket.RegisterSessionMessage(p, coredef.TestEchoACK{}, func(ses cellnet.Session, content interface{}) {
msg := content.(*coredef.TestEchoACK)
counter++
log.Printf("No. %d: server recv: %v", counter, msg.String())
// 发包后关闭
ses.Send(&coredef.TestEchoACK{
Content: proto.String(msg.GetContent()),
})
if msg.GetContent() != "noclose" {
ses.Close()
}
})
pipe.Start()
done <- 0
}
示例9: client
func client() {
pipe := cellnet.NewEventPipe()
p := socket.NewConnector(pipe).Start("127.0.0.1:7201")
rpc.InstallClient(p)
socket.RegisterSessionMessage(p, coredef.SessionConnected{}, func(content interface{}, ses cellnet.Session) {
rpc.Call(p, &coredef.TestEchoACK{
Content: "rpc hello",
}, func(msg *coredef.TestEchoACK) {
log.Debugln("client recv", msg.Content)
signal.Done(1)
})
})
pipe.Start()
signal.WaitAndExpect(1, "not recv data")
}
示例10: StartBackendConnector
// 后台服务器到router的连接
func StartBackendConnector(pipe cellnet.EventPipe, addressList []string, peerName string, svcName string) {
routerConnArray = make([]cellnet.Peer, len(addressList))
if len(addressList) == 0 {
log.Warnf("empty router address list")
return
}
for index, addr := range addressList {
peer := socket.NewConnector(pipe)
peer.SetName(peerName)
peer.(cellnet.Connector).SetAutoReconnectSec(defaultReconnectSec)
peer.Start(addr)
routerConnArray[index] = peer
// 连上网关时, 发送自己的服务器名字进行注册
socket.RegisterSessionMessage(peer, "coredef.SessionConnected", func(content interface{}, ses cellnet.Session) {
ses.Send(&coredef.RegisterRouterBackendACK{
Name: svcName,
})
})
// 广播
socket.RegisterSessionMessage(peer, "coredef.UpstreamACK", func(content interface{}, ses cellnet.Session) {
msg := content.(*coredef.UpstreamACK)
// 生成派发的消息
// TODO 用PostData防止多重嵌套?
// 调用已注册的回调
peer.CallData(&relayEvent{
SessionEvent: socket.NewSessionEvent(msg.MsgID, ses, msg.Data),
ClientID: msg.ClientID,
})
})
}
}
示例11: multiConn
// 多连接收封包后被服务器关闭, 确保收到封包
func multiConn() {
pipe := cellnet.NewEventPipe()
// 同步量
var endAcc sync.WaitGroup
// 启动N个连接
for i := 0; i < connCount; i++ {
endAcc.Add(1)
p := socket.NewConnector(pipe).Start("127.0.0.1:7235")
p.SetName(fmt.Sprintf("%d", i))
socket.RegisterSessionMessage(p, coredef.TestEchoACK{}, func(ses cellnet.Session, content interface{}) {
msg := content.(*coredef.TestEchoACK)
log.Println("client recv:", msg.String())
// 正常收到
endAcc.Done()
})
socket.RegisterSessionMessage(p, coredef.SessionConnected{}, func(ses cellnet.Session, content interface{}) {
id, _ := strconv.Atoi(ses.FromPeer().Name())
// 连接上发包
ses.Send(&coredef.TestEchoACK{
Content: proto.String(fmt.Sprintf("data#%d", id)),
})
})
}
pipe.Start()
// 等待完成
endAcc.Wait()
fmt.Println("multi connection close test done!")
}
示例12: testConnActiveClose
// 客户端连接上后, 主动断开连接, 确保连接正常关闭
func testConnActiveClose() {
pipe := cellnet.NewEventPipe()
p := socket.NewConnector(pipe).Start("127.0.0.1:7201")
socket.RegisterSessionMessage(p, coredef.SessionConnected{}, func(content interface{}, ses cellnet.Session) {
signal.Done(1)
// 连接上发包,告诉服务器不要断开
ses.Send(&coredef.TestEchoACK{
Content: proto.String("noclose"),
})
})
socket.RegisterSessionMessage(p, coredef.TestEchoACK{}, func(content interface{}, ses cellnet.Session) {
msg := content.(*coredef.TestEchoACK)
log.Debugln("client recv:", msg.String())
signal.Done(2)
// 客户端主动断开
ses.Close()
})
socket.RegisterSessionMessage(p, coredef.SessionClosed{}, func(content interface{}, ses cellnet.Session) {
log.Debugln("close ok!")
// 正常断开
signal.Done(3)
})
pipe.Start()
signal.WaitAndExpect(1, "TestConnActiveClose not connected")
signal.WaitAndExpect(2, "TestConnActiveClose not recv msg")
signal.WaitAndExpect(3, "TestConnActiveClose not close")
}
示例13: client
func client() {
pipe := cellnet.NewEventPipe()
evq := socket.NewConnector(pipe).Start(benchmarkAddress)
socket.RegisterSessionMessage(evq, "gamedef.TestEchoACK", func(content interface{}, ses cellnet.Session) {
ses.Send(&gamedef.TestEchoACK{})
})
socket.RegisterSessionMessage(evq, "gamedef.SessionConnected", func(content interface{}, ses cellnet.Session) {
ses.Send(&gamedef.TestEchoACK{})
})
pipe.Start()
}
示例14: testRecvDisconnected
// 接收封包后被断开
func testRecvDisconnected() {
pipe := cellnet.NewEventPipe()
p := socket.NewConnector(pipe).Start("127.0.0.1:7201")
socket.RegisterSessionMessage(p, coredef.SessionConnected{}, func(content interface{}, ses cellnet.Session) {
// 连接上发包
ses.Send(&coredef.TestEchoACK{
Content: proto.String("data"),
})
signal.Done(1)
})
socket.RegisterSessionMessage(p, coredef.TestEchoACK{}, func(content interface{}, ses cellnet.Session) {
msg := content.(*coredef.TestEchoACK)
log.Debugln("client recv:", msg.String())
signal.Done(2)
})
socket.RegisterSessionMessage(p, coredef.SessionClosed{}, func(content interface{}, ses cellnet.Session) {
// 断开
signal.Done(3)
})
pipe.Start()
signal.WaitAndExpect(1, "TestRecvDisconnected not connected")
signal.WaitAndExpect(2, "TestRecvDisconnected not recv msg")
signal.WaitAndExpect(3, "TestRecvDisconnected not closed")
}
示例15: InstallServer
func InstallServer(p cellnet.Peer) {
// 服务端
socket.RegisterSessionMessage(p, "coredef.RemoteCallREQ", func(content interface{}, ses cellnet.Session) {
msg := content.(*coredef.RemoteCallREQ)
p.CallData(&response{
ses: ses,
req: msg,
})
})
}