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()); } }
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); } } }
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); }