protected override void OnRun(IncomingMessage message)
        {
            ServerEnvelopeObject envelope = Manager.Serializer.GetObject<ServerEnvelopeObject>(message.Data);
            GameMessageType gmt = (GameMessageType)Enum.ToObject(typeof(GameMessageType), envelope.InnerOperationCode);

            switch (gmt)
            {
                case GameMessageType.Server_ReceiveTableListingRequest:
                    OnTableListingRequest(Manager.Serializer.GetObject<TableListingRequest>(envelope.InnerData), envelope.RouteInfo);
                    break;

                case GameMessageType.Server_ReceiveJoinTableRequest:
                    OnJoinTableRequest(envelope);
                    break;

                default:
                    IncomingGameMessageQueueItem defaultItem = new IncomingGameMessageQueueItem();
                    defaultItem.OperationCode = (GameMessageType)envelope.InnerOperationCode;
                    defaultItem.Data = envelope.InnerData;
                    defaultItem.RouteInfo = envelope.RouteInfo;

                    Manager.Tables[defaultItem.RouteInfo.TableId].PlayerPortal.IncomingQueue.Add(defaultItem);
                    break;
            }

            message.WasMessageHandled = true;
        }
        protected virtual void OnJoinTableRequest(ServerEnvelopeObject envelope)
        {
            JoinTableRequest jtres = Manager.Serializer.GetObject<JoinTableRequest>(envelope.InnerData);

            IncomingGameMessageQueueItem joinTableItem = new IncomingGameMessageQueueItem();
            joinTableItem.OperationCode = (GameMessageType)envelope.InnerOperationCode;
            joinTableItem.Data = envelope.InnerData;
            joinTableItem.RouteInfo = envelope.RouteInfo;

            Manager.Tables[jtres.TableToJoin].PlayerPortal.IncomingQueue.Add(joinTableItem);
        }