Ejemplo n.º 1
0
 /// <summary>
 /// Registers a callback to the specified channel. callback argument is guaranteed to be a byte[] encoded MessagePackSerializableObject object
 /// Use SerializationUtilities to deserialize to the correct message, which should be paired to the channel
 /// </summary>
 public void Subscribe(MessageTypes channel, EventHandler <NetworkMessageContainer> callback)
 {
     _sub.Subscribe(channel.ToString(), (rc, rv) => {
         try
         {
             callback(this, SerializationUtilities.DeserializeMsgPack <NetworkMessageContainer>(rv));
         }
         catch (Exception e)
         {
             ConsoleManager.WriteLine("Redis exception! " + e.Message, ConsoleMessageType.Error);
             ConsoleManager.WriteLine(e.StackTrace, ConsoleMessageType.Error);
         }
     });
 }
Ejemplo n.º 2
0
        protected T DeserializeMsgPack <T>(string key, RedisValue rawData)
            where T : MessagePackSerializableObject, new()
        {
            var encodedData = (byte[])rawData;

            if (encodedData == null)
            {
                _logError(new MsgPackMissingDataException("Data null when fetching from Redis"), key, rawData);
                return(null);
            }

            try
            {
                _logDebug("Deserializing Redis message", key, rawData);
                return(SerializationUtilities.DeserializeMsgPack <T>(encodedData));
            }
            catch (Exception e)
            {
                _logError(e, key, rawData);
                return(null);
            }
        }
Ejemplo n.º 3
0
        private void ProcessMessage(IGameTimeService gameTime, NetIncomingMessage msg)
        {
            var messageContainer = SerializationUtilities.DeserializeMsgPack <NetworkMessageContainer>(msg);

            if (messageContainer == null)
            {
                ConsoleManager.WriteLine("Corrupt message received", ConsoleMessageType.Warning);
                return;
            }

#if DEBUG
            if (messageContainer.MessageType != MessageTypes.PositionUpdateData &&
                messageContainer.MessageType != MessageTypes.FireRequestResponse)
            {
                //ConsoleManager.WriteLine(messageContainer.MessageType + " Message Received", ConsoleMessageType.NetworkMessageType);
            }
#endif


            switch (messageContainer.MessageType) // Add new message types to this.
            {
            case MessageTypes.EnterColony:
            {
                ChangeGameState = true;
                NextState       = GameStateType.Colony;

                break;
            }

            case MessageTypes.PortDockApproval:
            {
                ChangeGameState = true;
                NextState       = GameStateType.Port;
                break;
            }

            case MessageTypes.PlanetLandApproval:
            {
                ChangeGameState = true;
                NextState       = GameStateType.Planet;
                break;
            }

            case MessageTypes.StarSystemData:
            {
                ChangeGameState = true;
                NextState       = GameStateType.Space;
                break;
            }

            case MessageTypes.WarpApproval:
            {
                ChangeGameState = true;
                NextState       = GameStateType.Space;
                break;
            }

                #region Receive Port Ship

            case MessageTypes.ReceiveNewPortShip:
            {
                break;
            }

                #endregion

                #region Receive Heartbeat

            case (MessageTypes.ServerHeartbeat):

                _clientManager.LastSentServerTimeSync = gameTime.TotalMilliseconds;

                break;

                #endregion

                #region Chat Message

            case (MessageTypes.ChatMessage):
            {
                var data = messageContainer.MessageData as MessageChatMessage;

                _chatManager.AddChat(data.ChatMessageData.ChatJson, data.ChatMessageData.MetaJson);

                //Reads chat type and content, displays to chatbox
                break;
            }

                #endregion

            default:

                //Console.WriteLine("Unsupported message type " + (MessageTypes)messageHeader + " received");
                break;
            }

            _networkingService.TriggerMessageReceived(messageContainer);
        }
Ejemplo n.º 4
0
 public void UnSubscribe(ChannelTypes channelType, int channelID, EventHandler <NetworkMessageContainer> callback)
 {
     _sub.Unsubscribe(channelType.ToString() + channelID.ToString(), (rc, rv) => { callback(this, SerializationUtilities.DeserializeMsgPack <NetworkMessageContainer>(rv)); });
 }