public void CreateJoinRoom(Socket CreateJoinSocket,JSONObjects HandShake) { bool isNewRoom = true; int RoomID = 0; foreach (var room in ChowkaRoom) { if (room.Value < MaxPlayer) { if (ChowkaRoomState[room.Key] == eChowkaRoomState.CREATED) { isNewRoom = false; RoomID = room.Key; ChowkaRoom[room.Key]++; HandShake.WhoIAm = ChowkaRoom[room.Key]; if (ChowkaRoom[room.Key] == MaxPlayer) ChowkaRoomState[room.Key] = eChowkaRoomState.STARTING; foreach (var roomindex in RoomKey) { if (roomindex.Value == RoomID) { SocketKey.Add(CreateJoinSocket, roomindex.Key); break; } } break; } } } if (isNewRoom) { RoomID = GenerateRoomNo(); RoomKey.Add(RoomIndex, RoomID); SocketKey.Add(CreateJoinSocket, RoomIndex); ChowkaRoom.Add(RoomID, 1); ChowkaRoomState.Add(RoomID,eChowkaRoomState.CREATED); RoomIndex++; HandShake.WhoIAm = 1; } HandShake.RoomID = RoomID; }
/// <summary> /// Broadcasts a given message to every one except the one who created it & removes the socket. /// </summary> public void SendToAllExceptOne(string MessageData, Socket ExceptSocket, int SendRoom, bool remove) { if (remove) { foreach (var pair in SocketKey) { if (pair.Value == SendRoom) { if (null != pair.Key) { if (pair.Key != ExceptSocket) { if (!ChowkaWebSocket[ExceptSocket]) pair.Key.Send(Send(MessageData)); else { JSONObjects SendMessage = new JSONObjects() { ServerMessage = MessageData }; try { pair.Key.Send(Send(SendMessage.ToJsonString())); } catch (Exception ex) { } } } } } } SocketKey.Remove(ExceptSocket); PingKey.Remove(ExceptSocket); Console.WriteLine("connection close with:" + ExceptSocket.RemoteEndPoint); ExceptSocket.Close(); } }