Example #1
0
 /// <summary>
 /// 断开连接
 /// </summary>
 /// <param name="clientPeer"></param>
 public void OnDisconnect(ClientPeer clientPeer)
 {
     if (clientPeer != null)
     {
         clientPeer.OnDisconnect();
     }
 }
 /// <summary>
 /// 断开连接
 /// </summary>
 /// <param name="clientPeer"></param>
 public void OnDisconnect(ClientPeer clientPeer)
 {
     if (clientPeer != null)//如果要断开连接的客户端对象是可用状态
     {
         //Todo:一旦玩家断开了连接 可能要做断线重连功能
         //Todo:目前先这样做,就是判断所有房间内存不存在这个玩家,如果有一个房间内存在这个玩家,那么直接将这个玩家从房间内移除即可,其实就是类似于,玩家离开房间的操作
         //判断玩家在不在房间缓存类对象中的某一个房间内
         if (this.roomCache.IsInRoom(clientPeer, out int roomId))                                                                        //如果玩家在某一个房间内
         {
             UserInfo userInfo = this.roomCache.GetUserInfoByClientPeer(clientPeer);                                                     //取出离开房间的玩家信息数据
             this.message.ChangeMessage(OperationCode.Room, (int)RoomCode.LeaveRoom_BroadcastResponse, userInfo.ClientIndex.ToString()); //房间模块,离开房间响应,离开房间的玩家座位索引号
             this.roomCache.BroadcastMessageByRoomId(roomId, this.message);                                                              //广播消息
             RoomInfo leaveRoomInfo = this.roomCache.LeaveRoom(clientPeer, roomId);                                                      //使玩家离开房间,返回一个离开房间的房间信息对象
             //Todo:这里需要广播消息给房间内的每一个玩家,通知他们哪个玩家离开了房间,客户端需要更新界面的显示,也就是把离开的玩家的界面元素清除
         }
         clientPeer.OnDisconnect();//无论玩家在不在房间内,直接断开玩家与服务端的连接即可
     }
 }//断开连接