Exemple #1
0
        public async Task ShouldReturnMatchingResponses()
        {
            // Disable cache: otherwise, chromium will cache similar requests.
            await Page.SetCacheEnabledAsync(false);

            await Page.GoToAsync(TestConstants.EmptyPage);

            // Attach three frames.
            var matchingData = new MatchingResponseData[]
            {
                new MatchingResponseData {
                    FrameTask = FrameUtils.AttachFrameAsync(Page, "frame1", TestConstants.EmptyPage)
                },
                new MatchingResponseData {
                    FrameTask = FrameUtils.AttachFrameAsync(Page, "frame2", TestConstants.EmptyPage)
                },
                new MatchingResponseData {
                    FrameTask = FrameUtils.AttachFrameAsync(Page, "frame3", TestConstants.EmptyPage)
                }
            };

            await Task.WhenAll(matchingData.Select(m => m.FrameTask));

            // Navigate all frames to the same URL.
            var requestHandler = new RequestDelegate(async(context) =>
            {
                if (int.TryParse(context.Request.Query["index"], out var index))
                {
                    await context.Response.WriteAsync(await matchingData[index].ServerResponseTcs.Task);
                }
            });

            Server.SetRoute("/one-style.html?index=0", requestHandler);
            Server.SetRoute("/one-style.html?index=1", requestHandler);
            Server.SetRoute("/one-style.html?index=2", requestHandler);

            for (var i = 0; i < 3; ++i)
            {
                var waitRequestTask = Server.WaitForRequest("/one-style.html");
                matchingData[i].NavigationTask = matchingData[i].FrameTask.Result.GoToAsync($"{TestConstants.ServerUrl}/one-style.html?index={i}");
                await waitRequestTask;
            }
            // Respond from server out-of-order.
            var serverResponseTexts = new string[] { "AAA", "BBB", "CCC" };

            for (var i = 0; i < 3; ++i)
            {
                matchingData[i].ServerResponseTcs.TrySetResult(serverResponseTexts[i]);
                var response = await matchingData[i].NavigationTask;
                Assert.Same(matchingData[i].FrameTask.Result, response.Frame);
                Assert.Equal(serverResponseTexts[i], await response.TextAsync());
            }
        }
Exemple #2
0
        public bool Serialize(MatchingResponseData packet)
        {
            bool ret = true;

            int request = (int)packet.request;

            ret &= Serialize(request);
            int result = (int)packet.result;

            ret &= Serialize(result);
            ret &= Serialize(packet.myInfo);

            return(ret);
        }
    //매칭 응답 패킷 받기
    //매칭 중, 매칭 잡힘 처리
    public void OnReceiveMatchingResponsePacket(PacketId id, byte[] data)
    {
        //MatchingPacketId에 대한 처리해주기
        MatchingResponsePacket packet     = new MatchingResponsePacket(data);
        MatchingResponseData   packetData = packet.GetPacket();

        if (packetData.request == MatchingPacketId.MatchingResponse)
        {
            if (packetData.result == MatchingResult.Success)
            {
                Debug.Log("매칭중~~~~~~~");
                //매칭 중인것을 클라이언트에 표시해야 함
                ChangeMatchingState(MatchingState.WaitMatchingResult);
            }
            else
            {
                Debug.Log("매칭 실패");
                ChangeMatchingState(MatchingState.Nothing);
            }
        }
        //매칭이 잡힘
        else if (packetData.request == MatchingPacketId.MatchingCatch)
        {
            myInfo = -1;

            if (packetData.result == MatchingResult.Success)
            {
                myInfo = packetData.myInfo;
                //내 정보 상대 정보 저장.
                //수락 여부 버튼 띄우기.
                SoundManager.instance.PlaySound("Lobby_Matching", 1f);
                ChangeMatchingState(MatchingState.SelectMatchingResult);
            }
            else
            {
                Debug.Log("매칭 잡힘 실패");
                ChangeMatchingState(MatchingState.Nothing);
            }
        }
    }
Exemple #4
0
        public bool Deserialize(ref MatchingResponseData element)
        {
            if (GetDataSize() == 0)
            {
                // 데이터가 설정되어 있지 않습니다.
                return(false);
            }

            bool ret = true;

            int request = 0;

            ret            &= Deserialize(ref request);
            element.request = (MatchingPacketId)request;

            int result = 0;

            ret           &= Deserialize(ref result);
            element.result = (MatchingResult)result;

            ret &= Deserialize(ref element.myInfo);
            return(ret);
        }