/// <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();//无论玩家在不在房间内,直接断开玩家与服务端的连接即可 } }//断开连接