public static BaseWorldTcpMessage ReadMessage(IncomingMessage inMessage) { BaseWorldTcpMessage rv; byte[] data = inMessage.ReadBytes(); IncomingMessage subMsg = new IncomingMessage(data, inMessage); WorldTcpMessageType messageType = subMsg.ReadWorldTcpMessageType(); switch (messageType) { case WorldTcpMessageType.CharacterResponse: rv = new WorldCharacterResponseMessage(); break; case WorldTcpMessageType.CharacterCreateResponse: rv = new WorldCharacterCreateResponseMessage(); break; case WorldTcpMessageType.CharacterDeleteResponse: rv = new WorldCharacterDeleteResponseMessage(); break; case WorldTcpMessageType.CharacterSelectResponse: rv = new WorldCharacterSelectResponseMessage(); break; default: log.ErrorFormat("Unhandled world tcp message type: {0}", messageType); return null; } log.InfoFormat("WorldTcpMessageFactory got message type: {0}", messageType); rv.ParseWorldTcpMessage(subMsg); return rv; }