internal void OnDisconnected(MsgPackSession session, CloseReason value) { lock (this) { OutPut(session.SessionID + " disconnected:" + value); Client client = Session2ClientTable[session]; client.Connected -= OnConnected; //删除session对应 Session2ClientTable.Remove(session); session = null; //删除uid对应 if (client != null) { client.OnDisconnected(); if (UId2ClientTable.ContainsValue(client)) { UId2ClientTable.Remove(client.UserID); } //广播离线信息 ClientList.Instance().RemoveClient(client.UserID); //更新到form1 UpdateUsers(ClientList.Instance().GetUserList(0)); MyData data = new MyData() { Description = PacketDescription.Hall2Cient, Protocol = protocol.UpdateHallLeave, Body = new List <string> { client.UserID.ToString() } }; foreach (Client other in UId2ClientTable.Values) { other.SendProfileReply(data); } } } }
private void RoomSwitch(Client client, MyData data) { switch (data.Protocol) { case protocol.CreateRoom: CreateRoom(client, JsonUntity.Json2Object <GameSetting>(data.Body[0])); break; case protocol.JoinRoom: int room_id = -1; string pass = string.Empty; if (data.Body.Count > 0) { room_id = int.Parse(data.Body[0]); pass = data.Body[1].ToString(); } else { room_id = client.GameRoom; } Room room = RId2Room.ContainsKey(room_id) ? RId2Room[room_id] : null; bool result = false; if (room != null) { //if (JoinRoom != null) //{ // Delegate[] delArray = JoinRoom.GetInvocationList(); // foreach (Delegate del in delArray) // { // Room target = (Room)del.Target; // if (target != null && target.RoomId == room_id) // { // JoinRoomDelegate method = (JoinRoomDelegate)del; // result = method(client, room_id, pass); // } // } //} //JoinRoom?.Invoke(client, room_id, pass); result = room.OnClientRequestInter(client, room_id, pass); } if (!result) { Debug(string.Format("{0} join request fail at hall", client.UserName)); data = new MyData { Description = PacketDescription.Hall2Cient, Protocol = protocol.JoinRoom, }; client.SendSwitchReply(data); } else { ClientList.Instance().AddClient(client.UserID, client.Profile.NickName, room_id); UpdateUsers(ClientList.Instance().GetUserList(0)); } break; case protocol.LeaveRoom: if (RId2Room.ContainsKey(client.GameRoom)) { client.RequestLeaveRoom(); //更新form ClientList.Instance().AddClient(client.UserID, client.Profile.NickName); UpdateUsers(ClientList.Instance().GetUserList(0)); } break; case protocol.UpdateRoom: client.RequstReady(bool.Parse(data.Body[0])); break; case protocol.RoleReserved: if (client.UserRight >= 2 && RId2Room.ContainsKey(client.GameRoom)) { room = RId2Room[client.GameRoom]; if (!room.GameStarted && room.Setting.GameMode == "Classic") { client.RoleReserved = data.Body[0]; } } break; case protocol.KickOff: room = RId2Room.ContainsKey(client.GameRoom) ? RId2Room[client.GameRoom] : null; if (room != null && room.Host == client && !room.GameStarted) { int victim_id = int.Parse(data.Body[0]); Client victim = GetClient(victim_id); if (victim != null || victim_id < 0) { victim.RequestLeaveRoom(true); //更新form ClientList.Instance().AddClient(client.UserID, client.Profile.NickName); UpdateUsers(ClientList.Instance().GetUserList(0)); } } break; case protocol.ConfigChange: room = RId2Room.ContainsKey(client.GameRoom) ? RId2Room[client.GameRoom] : null; if (room != null && room.Host == client && !room.GameStarted) { room.ChangeSetting(JsonUntity.Json2Object <GameSetting>(data.Body[0])); } break; default: break; } }