本文整理汇总了Golang中libnet.Session.IsClosed方法的典型用法代码示例。如果您正苦于以下问题:Golang Session.IsClosed方法的具体用法?Golang Session.IsClosed怎么用?Golang Session.IsClosed使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类libnet.Session
的用法示例。
在下文中一共展示了Session.IsClosed方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: HandleClient
func (this *MsgServer) HandleClient(session *libnet.Session) {
defer waitgroup.Done()
//创建一个“匿名用户”,并添加到MS的用户列表中
user := common.NewUserInfo(session)
user.MsgChan = make(chan *msgcmd.Cmd, 1024)
//插入到用户列表中
this.userlist.Insert(user.Name, user)
var isRun bool = true
//开一个单独的协程,负责等待Client消息
go func() {
for isRun {
msg := new(msgcmd.Cmd)
if session.IsClosed() {
return
}
err := session.Receive(msg)
if err != nil {
if err == io.EOF {
//Client 关闭了会话
msg.Mid = msgcmd.MCMD_C2M_CLIENTEXIT
println("Client 关闭了会话")
isRun = false
}
println("Msg Server Error: 接收数据 失败. ", err.Error())
logFile.Printf("Msg Server Error: 接收数据 失败. ", err.Error())
}
user.MsgChan <- msg
}
}()
FORLOOP:
for {
timer := time.NewTimer(this.cfg.Expire * time.Second)
var msg *msgcmd.Cmd
select {
case msg = <-user.MsgChan:
case <-timer.C:
//接收客户端消息超时,客户端未做任何操作,同时没有心跳包发送过来,判定用户已经离线
msg = msgcmd.NewCmd(msgcmd.MCMD_C2M_CLIENTEXIT)
println("客户端操作超时")
}
timer.Stop()
switch msg.Mid {
case msgcmd.MCMD_C2M_REGISTER:
this.DoRegister(msg, user)
case msgcmd.MCMD_C2M_LOGIN:
this.DoLogin(msg, user)
case msgcmd.MCMD_C2M_HEARTBEAT:
this.DoHeartBeat(msg, user)
case msgcmd.MCMD_C2M_REQUEST_ONLINEUSERS:
this.DoRequestOnlineUsers(msg, user)
case msgcmd.MCMD_C2M_CLIENTEXIT:
this.DoClientExit(user)
break FORLOOP
default:
if msg != nil {
println("好像接收到了什么...")
}
}
}
println("用户Go程退出")
}