コード例 #1
0
        public void return_null_object_with_incorrectly_formmated_json_string()
        {
            SimCapiMessageType messageType   = SimCapiMessageType.ALLOW_INTERNAL_ACCESS;
            object             messageObject = Message.deserialize("INVALID JSON", ref messageType);

            Assert.AreEqual(null, messageObject);
        }
コード例 #2
0
        public void throw_error_when_message_type_is_not_supported()
        {
            SimCapiMessageType messageType = SimCapiMessageType.ALLOW_INTERNAL_ACCESS;

            // Create mock message with invalid message type
            int invalidMessageType = 5000;

            JObject message = new JObject();

            message.Add(new JProperty("type", invalidMessageType));
            message.Add("handshake", JObject.FromObject(createTestHandshake()));
            message.Add(new JProperty("values",
                                      new JObject(
                                          new JProperty("key", "RANDOMDATA"),
                                          new JProperty("simId", "RANDOMDATA")
                                          )
                                      ));


            string messageWithInvalidType = message.ToString(Formatting.None);

            TestDelegate testDelegate = delegate()
            {
                Message.deserialize(messageWithInvalidType, ref messageType);
            };

            Assert.Throws <System.Exception>(testDelegate);
        }
コード例 #3
0
            public static OnReady create(string jsonString)
            {
                JObject jObject = deserializeJson(jsonString);

                JProperty type      = jObject.Property("type");
                JProperty handshake = jObject.Property("handshake");

                if (type == null || type.Value == null || type.Value.Type != JTokenType.Integer)
                {
                    return(null);
                }

                // Must have handshake
                if (handshake == null)
                {
                    return(null);
                }

                SimCapiMessageType messageType = type.ToObject <SimCapiMessageType>();

                if (messageType != SimCapiMessageType.ON_READY)
                {
                    return(null);
                }

                OnReady onReady = new OnReady();

                onReady.handshake = handshake.Value.ToObject <SimCapiHandshake>();

                return(onReady);
            }
コード例 #4
0
            public static HandshakeRequest create(string jsonString)
            {
                JObject jObject = deserializeJson(jsonString);

                JProperty type      = jObject.Property("type");
                JProperty handshake = jObject.Property("handshake");

                if (type == null || type.Value == null || type.Value.Type != JTokenType.Integer)
                {
                    return(null);
                }

                // Must have handshake
                if (handshake == null)
                {
                    return(null);
                }

                SimCapiMessageType messageType = type.ToObject <SimCapiMessageType>();

                if (messageType != SimCapiMessageType.HANDSHAKE_REQUEST)
                {
                    return(null);
                }

                HandshakeRequest handshakeRequest = new HandshakeRequest();

                handshakeRequest.handshake = handshake.Value.ToObject <SimCapiHandshake>();

                return(handshakeRequest);
            }
コード例 #5
0
            public static SetDataRequest create(string jsonString)
            {
                JObject jObject = deserializeJson(jsonString);

                JProperty type      = jObject.Property("type");
                JProperty handshake = jObject.Property("handshake");
                JProperty values    = jObject.Property("values");

                if (type == null || type.Value == null || type.Value.Type != JTokenType.Integer)
                {
                    return(null);
                }

                // Must have handshake
                if (handshake == null)
                {
                    return(null);
                }

                if (values == null)
                {
                    return(null);
                }

                SimCapiMessageType messageType = type.ToObject <SimCapiMessageType>();

                if (messageType != SimCapiMessageType.SET_DATA_REQUEST)
                {
                    return(null);
                }

                JToken key   = values.Value["key"];
                JToken simId = values.Value["simId"];
                JToken value = values.Value["value"];

                if (key == null && key.Type != JTokenType.String)
                {
                    return(null);
                }

                if (simId == null && simId.Type != JTokenType.String)
                {
                    return(null);
                }

                if (value == null && value.Type != JTokenType.String)
                {
                    return(null);
                }

                SetDataRequest setDataRequest = new SetDataRequest();

                setDataRequest.handshake = handshake.Value.ToObject <SimCapiHandshake>();
                setDataRequest.key       = key.ToObject <string>();
                setDataRequest.simId     = simId.ToObject <string>();
                setDataRequest.value     = value.ToObject <string>();

                return(setDataRequest);
            }
コード例 #6
0
        public void handleMessage(System.Object message, SimCapiMessageType messageType)
        {
            switch (messageType)
            {
            case SimCapiMessageType.HANDSHAKE_RESPONSE:
                handleHandshakeResponse((Message.HandshakeResponse)message);
                break;

            case SimCapiMessageType.VALUE_CHANGE:
                handleValueChangeMessage((Message.ValueChange)message);
                break;

            case SimCapiMessageType.CONFIG_CHANGE:
                handleConfigChangeMessage((Message.ConfigChange)message);
                break;

            case SimCapiMessageType.VALUE_CHANGE_REQUEST:
                handleValueChangeRequestMessage((Message.ValueChangeRequest)message);
                break;

            case SimCapiMessageType.CHECK_COMPLETE_RESPONSE:
                handleCheckCompleteResponse((Message.CheckCompleteResponse)message);
                break;

            case SimCapiMessageType.CHECK_START_RESPONSE:
                handleCheckStartResponse((Message.CheckStartResponse)message);
                break;

            case SimCapiMessageType.GET_DATA_RESPONSE:
                handleGetDataResponse((Message.GetDataResponse)message);
                break;

            case SimCapiMessageType.SET_DATA_RESPONSE:
                handleSetDataResponse((Message.SetDataResponse)message);
                break;

            case SimCapiMessageType.API_CALL_RESPONSE:
                break;

            case SimCapiMessageType.INITIAL_SETUP_COMPLETE:
                handleInitialSetupComplete((Message.InitialSetupComplete)message);
                break;

            case SimCapiMessageType.RESIZE_PARENT_CONTAINER_RESPONSE:
                handleResizeParentContainerResponse((Message.ResizeParentContainerResponse)message);
                break;

            case SimCapiMessageType.ALLOW_INTERNAL_ACCESS:
                setDomainToShortform();
                break;

            case SimCapiMessageType.REGISTERED_LOCAL_DATA_CHANGED:
                handleLocalDataChanged((Message.RegisteredLocalDataChanged)message);
                break;
            }
        }
コード例 #7
0
        public static void setUpTransporterInConnectedState(Transporter transporter, TestMessagePipe testMessagePipe)
        {
            transporter.notifyOnReady();

            Assert.AreEqual(1, testMessagePipe.messageCount());

            string handshakeRequestJson = testMessagePipe.sendMessageList[0];

            Message.HandshakeRequest handshakeRequest = Message.HandshakeRequest.create(handshakeRequestJson);

            Assert.AreNotEqual(null, handshakeRequest);

            handshakeRequest.handshake.authToken = "testToken";

            // Create test config
            SimCapiConfig config = TestHelpers.createTestConfig();

            handshakeRequest.handshake.config = config;

            string handshakeResposeMessage = SimCapiJsonMaker.DebugReciveMessages.create_HANDSHAKE_RESPONSE(handshakeRequest.handshake);


            transporter.reciveJsonMessage(handshakeResposeMessage);

            transporter.update(delayToGuaranteeMessageProceed());


            Assert.AreEqual(3, testMessagePipe.messageCount());

            string onReadyJson = testMessagePipe.sendMessageList[1];

            // deserialize first message
            Message.OnReady onReady = Message.OnReady.create(onReadyJson);

            // Verify valid OnReady message
            Assert.AreNotEqual(null, onReady);

            string valueChangeJson = testMessagePipe.sendMessageList[2];

            // deserialize second message
            SimCapiMessageType messageType = SimCapiMessageType.ALLOW_INTERNAL_ACCESS;
            object             message     = Message.deserialize(valueChangeJson, ref messageType);

            // Verify valid ValueChange message
            Assert.AreNotEqual(null, message);
            Assert.AreEqual(typeof(Message.ValueChange), message.GetType());

            // Send INITIAL_SETUP_COMPLETE message
            string initialSetupCompleteJson = SimCapiJsonMaker.DebugReciveMessages.create_INITIAL_SETUP_COMPLETE(transporter.getHandshake());

            transporter.reciveJsonMessage(initialSetupCompleteJson);
        }
コード例 #8
0
            public static RegisterLocalDataChangeListener create(string jsonString)
            {
                JObject jObject = deserializeJson(jsonString);

                JProperty type      = jObject.Property("type");
                JProperty handshake = jObject.Property("handshake");
                JProperty values    = jObject.Property("values");

                if (type == null || type.Value == null || type.Value.Type != JTokenType.Integer)
                {
                    return(null);
                }

                // Must have handshake
                if (handshake == null)
                {
                    return(null);
                }

                if (values == null)
                {
                    return(null);
                }

                SimCapiMessageType messageType = type.ToObject <SimCapiMessageType>();

                if (messageType != SimCapiMessageType.REGISTER_LOCAL_DATA_CHANGE_LISTENER)
                {
                    return(null);
                }

                JToken key   = values.Value["key"];
                JToken simId = values.Value["simId"];

                if (key == null && key.Type != JTokenType.String)
                {
                    return(null);
                }

                if (simId == null && simId.Type != JTokenType.String)
                {
                    return(null);
                }

                RegisterLocalDataChangeListener registerLocalDataChangeListener = new RegisterLocalDataChangeListener();

                registerLocalDataChangeListener.handshake = handshake.Value.ToObject <SimCapiHandshake>();
                registerLocalDataChangeListener.key       = key.ToObject <string>();
                registerLocalDataChangeListener.simId     = simId.ToObject <string>();

                return(registerLocalDataChangeListener);
            }
コード例 #9
0
        public void reciveJsonMessage(string jsonString)
        {
            SimCapiMessageType messageType = SimCapiMessageType.ALLOW_INTERNAL_ACCESS;

            System.Object message = Message.deserialize(jsonString, ref messageType);

            if (message == null)
            {
                return;
            }

            handleMessage(message, messageType);
        }
コード例 #10
0
            public static ValueChange createWithJsonString(string jsonString)
            {
                JObject jObject = deserializeJson(jsonString);

                JProperty type      = jObject.Property("type");
                JProperty handshake = jObject.Property("handshake");
                JProperty values    = jObject.Property("values");

                if (type == null || type.Value == null || type.Value.Type != JTokenType.Integer)
                {
                    return(null);
                }

                if (handshake == null)
                {
                    return(null);
                }

                if (values == null)
                {
                    return(null);
                }

                SimCapiMessageType messageType = type.ToObject <SimCapiMessageType>();

                if (messageType != SimCapiMessageType.VALUE_CHANGE)
                {
                    return(null);
                }

                ValueChange valueChange = new ValueChange();

                valueChange.handshake = handshake.Value.ToObject <SimCapiHandshake>();

                foreach (JProperty property in values.Values())
                {
                    SimCapiValue simCapiValue = createUnitySimCapiValue(property);

                    if (simCapiValue != null)
                    {
                        valueChange.values.Add(simCapiValue.key, simCapiValue);
                    }
                }

                return(valueChange);
            }
コード例 #11
0
        public static System.Object deserialize(string jsonString, ref SimCapiMessageType messageType)
        {
            JObject jObject;

            try
            {
                jObject = JsonConvert.DeserializeObject <JObject>(jsonString);
            }
            catch (System.Exception)
            {
                return(null);
            }

            JProperty type = jObject.Property("type");

            if (type == null)
            {
                throw new System.Exception("Invalid message structure");
            }

            JToken typeValue = jObject["type"];

            if (typeValue.Type != JTokenType.Integer)
            {
                throw new System.Exception("type property should be an Integer");
            }


            messageType = typeValue.ToObject <SimCapiMessageType>();



            switch (messageType)
            {
            case SimCapiMessageType.HANDSHAKE_RESPONSE:
                return(HandshakeResponse.create(jObject));

            case SimCapiMessageType.VALUE_CHANGE:
                return(ValueChange.create(jObject));

            case SimCapiMessageType.CONFIG_CHANGE:
                return(ConfigChange.create(jObject));

            case SimCapiMessageType.VALUE_CHANGE_REQUEST:
                return(ValueChangeRequest.create(jObject));

            case SimCapiMessageType.CHECK_COMPLETE_RESPONSE:
                return(CheckCompleteResponse.create(jObject));

            case SimCapiMessageType.CHECK_START_RESPONSE:
                return(CheckStartResponse.create(jObject));

            case SimCapiMessageType.GET_DATA_RESPONSE:
                return(GetDataResponse.create(jObject));

            case SimCapiMessageType.SET_DATA_RESPONSE:
                return(SetDataResponse.create(jObject));

            case SimCapiMessageType.API_CALL_RESPONSE:
                return(null);

            case SimCapiMessageType.INITIAL_SETUP_COMPLETE:
                return(InitialSetupComplete.create(jObject));

            case SimCapiMessageType.RESIZE_PARENT_CONTAINER_RESPONSE:
                return(ResizeParentContainerResponse.create(jObject));

            case SimCapiMessageType.ALLOW_INTERNAL_ACCESS:
                return(AllowInternalAccess.create(jObject));

            case SimCapiMessageType.REGISTERED_LOCAL_DATA_CHANGED:
                return(RegisteredLocalDataChanged.create(jObject));
            }

            throw new System.Exception("Invalid message type");
        }