public void Initialize_Input_Serializers()
        {
            // arrange
            var serializer = new InputSerializer();

            // act
            var resolver = new ValueSerializerCollection(
                new IValueSerializer[] { serializer }.ToDictionary(t => t.Name));

            // assert
            Assert.True(serializer.IsInitialized);
        }
        public void Initialize_Input_Serializers()
        {
            // arrange
            var serializer = new InputSerializer();

            // act
            var resolver = new ValueSerializerResolver(
                new IValueSerializer[] { serializer });

            // assert
            Assert.True(serializer.IsInitialized);
        }
示例#3
0
        public void IniSerialize_Test()
        {
            var           serializer   = new IniConfigurationSerializer(new BooleanMapping("true", "false"), "nul");
            string        _mapping     = TestUtilities.GetStringResource("InputMappings.DirectInput.XINPUT_DEVICE.json");
            IInputMapping mapping      = JsonConvert.DeserializeObject <InputMapping>(_mapping);
            var           testmappings = new StoneProvider().Controllers.First().Value;
            var           realmapping  =
                JsonConvert.DeserializeObject <ControllerLayout>(
                    TestUtilities.GetStringResource("InputMappings.xinput_device.json"));
            var    mapcol          = ControllerElementMappings.GetDefaultMappings(realmapping, testmappings);
            var    template        = new InputTemplate <IRetroArchInput>(mapcol, 0);
            string serializedValue = new InputSerializer(serializer).Serialize(template, mapping)
                                     .Replace(Environment.NewLine, string.Empty);

            Assert.Equal(
                TestUtilities.GetStringResource("Configurations.ExampleInput.ini")
                .Replace(Environment.NewLine, string.Empty),
                serializedValue);
        }
示例#4
0
    // 송신.
    void SendInputData()
    {
        PlayerInfo info     = PlayerInfo.GetInstance();
        int        playerId = info.GetPlayerId();
        int        count    = inputBuffer[playerId].Count;

        InputData inputData = new InputData();

        inputData.count = count;
        inputData.flag  = suspendSync;
        inputData.datum = new MouseData[bufferNum];

        //string str1 = "Count :" + count;
        //Debug.Log(str1);
        for (int i = 0; i < count; ++i)
        {
            inputData.datum[i] = inputBuffer[playerId][i];

            //str1 = "Send mouse data => id:" + i + " - " + inputBuffer[playerId][i].frame;
            //Debug.Log(str1);
        }

        // 구조체를 byte 배열로 변환합니다.
        InputSerializer serializer = new InputSerializer();
        bool            ret        = serializer.Serialize(inputData);

        if (ret)
        {
            byte[] data = serializer.GetSerializedData();

            // 데이터를 송신합니다.
            m_transport.Send(data, data.Length);
        }

        // 상태를 갱신.
        if (syncState == SyncState.NotStarted)
        {
            syncState = SyncState.WaitSynchronize;
        }
    }
示例#5
0
	// 수신.
	public void ReceiveInputData()
	{
		byte[] data = new byte[1400];

		// 데이터를 송신합니다.
		int recvSize = m_transport.Receive(ref data, data.Length);
		if (recvSize < 0)
		{
			// 입력정보를 수신하지 않았으므로 다음 프레임을 처리할 수 없습니다.
			return;
		}

		string str = System.Text.Encoding.UTF8.GetString(data);
		if (requestData.CompareTo(str.Trim('\0')) == 0)
		{
			// 접속 요청 패킷 .
			return;
		}

		// byte 배열을 구조체로 변환합니다.
		InputData inputData = new InputData();
		InputSerializer serializer = new InputSerializer();
		serializer.Deserialize(data, ref inputData);

		// 수신한 입력 정보를 설정합니다.
		//PlayerInfo info = PlayerInfo.GetInstance();
		//int playerId = info.GetPlayerId();
		int playerId = 0;
		int opponent = (playerId == 0) ? 1 : 0;

		for (int i = 0; i < inputData.count; ++i)
		{
			int frame = inputData.datum[i].frame;
			//Debug.Log("Set inputdata"+i+"[" + recvFrame + "][" + frame + "]:" + (recvFrame + 1 == frame));
			if (recvFrame + 1 == frame)
			{
				mouseInputBuffer[opponent].Add(inputData.datum[i]);
				++recvFrame;
			}
		}
		//Debug.Log("recvFrame:" + recvFrame);

		// 접속 종료 플래그를 감시.  bit1:접속 종료 응답, bit0: 접속 종료 요구.
		if ((inputData.flag & 0x03) == 0x03)
		{
			// 접속 종료 플래그 수신.
			suspendSync = 0x03;
			Debug.Log("Receive SuspendSync.");
		}

		if ((inputData.flag & 1) > 0 && (suspendSync & 1) > 0)
		{
			suspendSync |= 0x02;
			Debug.Log("Receive SuspendSync." + inputData.flag);
		}

		if (isConnected && suspendSync == 0x03)
		{
			// 서로 접속 종료 상태가 되었으므로 상대에게의 접속 종료 플래그를 보내기위한.
			// 유예기간을 두고 조금 후에 접속종료합니다.
			++disconnectCount;
			if (disconnectCount > 10)
			{
				m_transport.Disconnect();
				Debug.Log("Disconnect because of suspendSync.");
			}
		}


		// 상태 갱신.
		if (syncState == SyncState.NotStarted)
		{
			syncState = SyncState.WaitSynchronize;
		}

		//loopCounter = 0;
	}
示例#6
0
    // 수신.
    public void ReceiveInputData()
	{
		byte[] data = new byte[1400];
		
		// 데이터를 송신합니다.
		int recvSize = m_transport.Receive(ref data, data.Length);
		if (recvSize < 0) {
			// 입력정보를 수신하지 않았으므로 다음 프레임을 처리할 수 없습니다.
			return;
		} 

		string str = System.Text.Encoding.UTF8.GetString(data);
		if (requestData.CompareTo(str.Trim('\0')) == 0) {
			// 접속 요청 패킷 .
			return;
		}

		// byte 배열을 구조체로 변환합니다.
		InputData inputData = new InputData();
		InputSerializer serializer = new InputSerializer();
		serializer.Deserialize(data, ref inputData);
		
		// 수신한 입력 정보를 설정합니다.
		PlayerInfo info = PlayerInfo.GetInstance();
		int playerId = info.GetPlayerId();
		int opponent = (playerId == 0)? 1 : 0;
		
		for (int i = 0; i < inputData.count; ++i) {
			int frame = inputData.datum[i].frame;
			//Debug.Log("Set inputdata"+i+"[" + recvFrame + "][" + frame + "]:" + (recvFrame + 1 == frame));
			if (recvFrame + 1 == frame) {
				inputBuffer[opponent].Add(inputData.datum[i]);
				++recvFrame;
			}
		}
        //Debug.Log("recvFrame:" + recvFrame);

		// 접속 종료 플래그를 감시.  bit1:접속 종료 응답, bit0: 접속 종료 요구.
		if ((inputData.flag & 0x03) == 0x03) {
			// 접속 종료 플래그 수신.
			suspendSync = 0x03;
			Debug.Log("Receive SuspendSync.");
		}

		if ((inputData.flag & 1) > 0 && (suspendSync & 1) > 0) {
			suspendSync |= 0x02;
			Debug.Log("Receive SuspendSync." + inputData.flag);
		}

		if (isConnected && suspendSync == 0x03) {
			// 서로 접속 종료 상태가 되었으므로 상대에게의 접속 종료 플래그를 보내기위한.
			// 유예기간을 두고 조금 후에 접속종료합니다.
			++disconnectCount;
			if (disconnectCount > 10) {
				m_transport.Disconnect();
				Debug.Log("Disconnect because of suspendSync.");
			}
		}
		

		// 상태 갱신.
		if (syncState == SyncState.NotStarted) {
			syncState = SyncState.WaitSynchronize;
		}

		//loopCounter = 0;
	}
示例#7
0
    // 송신.
    void SendInputData()
	{
		PlayerInfo info = PlayerInfo.GetInstance();
		int playerId = info.GetPlayerId();
		int count = inputBuffer[playerId].Count;
		
		InputData inputData = new InputData();
		inputData.count = count;
		inputData.flag = suspendSync;
		inputData.datum = new MouseData[bufferNum];

		//string str1 = "Count :" + count;
		//Debug.Log(str1);
		for (int i = 0; i < count; ++i) {
			inputData.datum[i] = inputBuffer[playerId][i];

			//str1 = "Send mouse data => id:" + i + " - " + inputBuffer[playerId][i].frame;
			//Debug.Log(str1);
		}
		
		// 구조체를 byte 배열로 변환합니다.
		InputSerializer serializer = new InputSerializer();
		bool ret = serializer.Serialize(inputData);
		if (ret) {
			byte[] data = serializer.GetSerializedData();
			
			// 데이터를 송신합니다.
			m_transport.Send(data, data.Length);
		}

		// 상태를 갱신.
		if (syncState == SyncState.NotStarted) {
			syncState = SyncState.WaitSynchronize;
		}
    }