static void RecieveCallback(IAsyncResult result) { Socket s = result.AsyncState as Socket; try { int count = s.EndReceive(result); if (count > 0) { Message m = Message.GetData(buffer); switch (m.type) { case MESSAGE_TYPE.SERVER_ANSWER_LOGIN: { Logined(m); break; } case MESSAGE_TYPE.SERVER_ANSWER_GET_ONLINE_LIST: { RoomFindingScreen.players.Clear(); foreach (var v in m.parameters) { RoomFindingScreen.players.Add(v.ToString()); } break; } case MESSAGE_TYPE.SERVER_ANSWER_GET_CHAT_CHANNELS: { ChatChannel.Synchronize(m.parameters, RoomFindingScreen.chatChannels); break; } case MESSAGE_TYPE.SERVER_ANSWER_MESSAGE: { int index = ChatChannel.GetIndex(m.parameters[0], RoomFindingScreen.chatChannels); RoomFindingScreen.chatChannels[index].AddMessage(m.parameters[1], m.parameters[2]); break; } case MESSAGE_TYPE.SERVER_ANSWER_CREATE_CHAT_CHANNEL: { if ((bool)m.parameters[0]) { ChannelMenu.confirmedCreation = true; } else { ChannelMenu.answer = "\n(try another channel name)"; ChannelMenu.failedCreation = true; } break; } case MESSAGE_TYPE.SERVER_ANSWER_JOIN_CHAT_CHANNEL: { if ((bool)m.parameters[0]) { ChannelMenu.confirmedJoin = true; } else { ChannelMenu.answer = "\n(try another channel name)"; ChannelMenu.confirmedJoin = true; } break; } case MESSAGE_TYPE.SERVER_ANSWER_LEAVE_CHAT_CHANNEL: { if ((bool)m.parameters[0]) { ChannelMenu.confirmedLeave = true; } else { ChannelMenu.answer = "\n(try another channel name)"; ChannelMenu.confirmedLeave = true; } break; } case MESSAGE_TYPE.SERVER_ANSWER_START_GAME: { if ((bool)m.parameters[0] == true) { GameStarted(m); } break; } case MESSAGE_TYPE.SERVER_ANSWER_MOVE: { Moved(m); break; } } s.BeginReceive(buffer, 0, 1024, SocketFlags.None, RecieveCallback, s); } } catch (Exception exception) { //Output.Write(exception); } }