public void listenForClientMsg(NetworkMessage msg) { ConnectedClient c = GameRoomClients.getMatchingClient(msg.conn); CommProtocol.AlbotHandler h = currentHandlers.Find(x => x.msgType == msg.msgType); //There should be someway to do this with generics and without reflection right? try{ byte[] bytes = msg.reader.ReadBytesAndSize(); object objMsg = null; if (h.type == typeof(CommProtocol.StringMessage)) { objMsg = Game.ClientController.Deserialize <CommProtocol.StringMessage> (bytes); } if (h.type == typeof(Soldiers.PlayerCommands)) { objMsg = Game.ClientController.Deserialize <Soldiers.PlayerCommands> (bytes); } if (h.type == typeof(Bomberman.PlayerCommand)) { objMsg = Game.ClientController.Deserialize <Bomberman.PlayerCommand> (bytes); } if (h.type == typeof(Snake.GameCommand)) { objMsg = Game.ClientController.Deserialize <Snake.GameCommand> (bytes); } h.func(objMsg, c); } catch {} }
public void registerHandler(CommProtocol.AlbotHandler newHandler, int playerID) { ConnectedClient c = GameRoomClients.getMatchingClient(playerID); c.conn.RegisterHandler(newHandler.msgType, listenForClientMsg); currentHandlers.Add(newHandler); }