static public void Loop(Lobby page) { if (client.socket == null || client.socket.Connected == false) { return; } CompletePacket data; if (client.PacketQueue.TryDequeue(out data) == true) { try { switch (data.Protocol) { case (int)PROTOCOL.IdPktVersionRes: { VERSION_RES res = new VERSION_RES(); res = VERSION_RES.Parser.ParseFrom(data.Data); var currentVersion = VersionTracking.CurrentVersion; float myversion = float.Parse(currentVersion); const Double Eps = 0.000000000000001; if (Math.Abs(res.VarVersion - myversion) > Eps) { //첫 검수라 임시 주석 2번째 패치 부터는 활성화 // Xamarin.Essentials.Browser.OpenAsync("https://play.google.com/store/apps/details?id=com.companyname.OMOK"); // return; } NetProcess.SendLogin(User.Uid, User.Token); } break; case (int)PROTOCOL.IdPktLoginRes: { LOGIN_RES res = new LOGIN_RES(); res = LOGIN_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { page.ClosePopup(); }); if (res.VarCode == ErrorCode.Success) { User.IsLogin = true; User.Id = res.VarIndex; User.myInfo.win = res.VarWin; User.myInfo.lose = res.VarLose; User.myInfo.draw = res.VarDraw; User.myInfo.score = res.VarScore; User.myInfo.rank = res.VarRank; User.myInfo.level = res.VarLevel; User.myInfo.NickName = Helper.ToStr(res.VarName.ToByteArray());; User.Locale = Helper.ToStr(res.VarLocale.ToByteArray()); User.state = PlayerState.Lobby; SendNoticeReq(); Device.BeginInvokeOnMainThread(() => { page.UpdatePlayerInfo(); page.UpdateLocalMenu(); if (User.myInfo.NickName == "") { page.NickNamePopup(); } else { if (User.Auto == true) { page.MatchAuto(); } } }); } else { //강제 exception 발생후 종료 후 재 실행 //System.Diagnostics.Process.GetCurrentProcess().Close(); //page.LoginInformation("Failed Login."); throw new NullReferenceException(); } } break; case (int)PROTOCOL.IdPktNoticeRes: { NOTICE_RES res = new NOTICE_RES(); res = NOTICE_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { page.SetNotice(Helper.ToStr(res.VarMessage.ToByteArray())); }); } break; case (int)PROTOCOL.IdPktCheckNicknameRes: { CHECK_NICKNAME_RES res = new CHECK_NICKNAME_RES(); res = CHECK_NICKNAME_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { if (res.VarCode != ErrorCode.Success) { page.SendNickNamePopupMessage(); } else { User.myInfo.NickName = Helper.ToStr(res.VarName.ToByteArray()); page.CloseAllPopup(); page.UpdatePlayerInfo(); } }); } break; case (int)PROTOCOL.IdPktCreateRoomRes: { CREATE_ROOM_RES res = new CREATE_ROOM_RES(); res = CREATE_ROOM_RES.Parser.ParseFrom(data.Data); if (res.VarCode == ErrorCode.Success) { Device.BeginInvokeOnMainThread(() => { page.ClosePopup(); User.Color = eTeam.Black; User.IsMyTurn = true; User.state = PlayerState.Room; pRoom = new Room(); page.PushRoomPopup(pRoom); }); } else { } } break; case (int)PROTOCOL.IdPktNewUserInRoomNty: { NEW_USER_IN_ROOM_NTY res = new NEW_USER_IN_ROOM_NTY(); res = NEW_USER_IN_ROOM_NTY.Parser.ParseFrom(data.Data); { //상대방이름 //나갈때 초기화한다. User.OppInfo.PhotoPath = Encoding.UTF8.GetString(res.VarRoomUser.PictureUri.ToByteArray()); User.OppInfo.NickName = Helper.ToStr(res.VarRoomUser.VarName.ToByteArray()); } Device.BeginInvokeOnMainThread(() => { pRoom.UpdateBattleInfo(); }); } break; case (int)PROTOCOL.IdPktBitmapMessageRes: { BITMAP_MESSAGE_RES res = new BITMAP_MESSAGE_RES(); res = BITMAP_MESSAGE_RES.Parser.ParseFrom(data.Data); foreach (var msg in res.VarMessage) { JpegStream.Enqueue(new MemoryStream(msg.ToByteArray())); } } break; case (int)PROTOCOL.IdPktRoomPassThroughRes: { ROOM_PASS_THROUGH_RES res = new ROOM_PASS_THROUGH_RES(); res = ROOM_PASS_THROUGH_RES.Parser.ParseFrom(data.Data); if (res.VarCode == ErrorCode.Success) { Device.BeginInvokeOnMainThread(() => { pRoom.ProcReceivePutStoneMessage(res); }); } } break; case (int)PROTOCOL.IdPktRoomListRes: { Device.BeginInvokeOnMainThread(() => { page.UpdateMessage(data); }); } break; case (int)PROTOCOL.IdPktAudioMessageRes: { AUDIO_MESSAGE_RES res = new AUDIO_MESSAGE_RES(); res = AUDIO_MESSAGE_RES.Parser.ParseFrom(data.Data); foreach (var msg in res.VarMessage) { AudioStream.Enqueue(new MemoryStream(msg.ToByteArray())); } } break; case (int)PROTOCOL.IdPktRankRes: { RANK_RES res = new RANK_RES(); res = RANK_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { page.CreateRankPage(res.VarRankList); }); } break; case (int)PROTOCOL.IdPktLeaveRoomRes: { LEAVE_ROOM_RES res = new LEAVE_ROOM_RES(); res = LEAVE_ROOM_RES.Parser.ParseFrom(data.Data); if (res.VarIndex == User.Id) { User.state = PlayerState.Lobby; Device.BeginInvokeOnMainThread(() => { pRoom.ShowLeaveAd(); page.PopRoomPopup(); }); if (User.Auto == true) { Thread.Sleep(1000); Device.BeginInvokeOnMainThread(() => { page.MatchAuto(); }); } } Device.BeginInvokeOnMainThread(() => { page.UpdatePlayerInfo(); }); } break; case (int)PROTOCOL.IdPktEnterRoomRes: { ENTER_ROOM_RES res = new ENTER_ROOM_RES(); res = ENTER_ROOM_RES.Parser.ParseFrom(data.Data); if (res.VarCode == ErrorCode.Success) { Device.BeginInvokeOnMainThread(() => { page.ClosePopup(); pRoom = new Room(); User.Color = eTeam.White; User.IsMyTurn = false; User.state = PlayerState.Room; page.PushRoomPopup(pRoom); }); } } break; case (int)PROTOCOL.IdPktGameResultNty: { GAME_RESULT_NTY res = new GAME_RESULT_NTY(); res = GAME_RESULT_NTY.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { if (User.Auto == true) { pRoom.GameResult(res); pRoom.SendLeaveRoom(); } else { pRoom.GameResult(res); } }); } break; } } catch (Exception ex) { Console.Write(ex.ToString()); } } }
static public void Loop() { if (client.socket == null || client.socket.Connected == false) { return; } CompletePacket data; if (client.PacketQueue.TryDequeue(out data) == true) { try { switch (data.Protocol) { case (int)PROTOCOL.IdPktVersionRes: { VERSION_RES res = new VERSION_RES(); res = VERSION_RES.Parser.ParseFrom(data.Data); var currentVersion = VersionTracking.CurrentVersion; double myversion; if (double.TryParse(currentVersion, out myversion) == false) { } const Double Eps = 0.000000000000001; User.Version = res.VarVersion; if (Math.Abs(res.VarVersion - myversion) > Eps) { //첫 검수라 임시 주석 2번째 패치 부터는 활성화 if (Device.RuntimePlatform == Device.Android && User.OnceVersionNotify == false) { Device.BeginInvokeOnMainThread(() => { User.OnceVersionNotify = true; DependencyService.Get <Toast>().Notification("New Version Updated"); }); } } SQLLiteDB.LoadCacheData(); if (User.CacheData.UserName != null) { NetProcess.SendLogin(User.CacheData.UserName, User.CacheData.Passwd); } } break; case (int)PROTOCOL.IdPktLoginRes: { LOGIN_RES res = new LOGIN_RES(); res = LOGIN_RES.Parser.ParseFrom(data.Data); var mainpage = (MainPage)Application.Current.MainPage; if (res.VarCode == ErrorCode.Success) { User.LoginSuccess = true; SQLLiteDB.Upsert(User.CacheData.FontSize, User.CacheData.BibleName, User.CacheData.Chapter, User.CacheData.Verse, User.CacheData.UserName, User.CacheData.Passwd); Device.BeginInvokeOnMainThread(() => { mainpage.setting.UpdateLoginState("(Success)"); mainpage.setting.UpdateNameEntry(User.CacheData.UserName); var page = mainpage.CurrentView(); var settingview = page as SettingView; if (settingview == null) { mainpage.LoadLobby(); } }); } else { Device.BeginInvokeOnMainThread(() => { mainpage.setting.UpdateLoginState("(Failed)"); }); User.LoginSuccess = false; } } break; case (int)PROTOCOL.IdPktRoomListRes: { ROOM_LIST_RES res = new ROOM_LIST_RES(); res = ROOM_LIST_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; RoomsPageView roompage = mainpage.lobby.roompage as RoomsPageView; roompage?.LoadRoomList(res); }); } break; case (int)PROTOCOL.IdPktNoticeRes: { NOTICE_RES res = new NOTICE_RES(); res = NOTICE_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; mainpage.alarm.LoadList(res); }); } break; case (int)PROTOCOL.IdPktMailListRes: { MAIL_LIST_RES res = new MAIL_LIST_RES(); res = MAIL_LIST_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; mainpage.mail.LoadList(res); }); } break; case (int)PROTOCOL.IdPktPrayMessageRes: { PRAY_MESSAGE_RES res = new PRAY_MESSAGE_RES(); res = PRAY_MESSAGE_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; PrayView prayview = mainpage.lobby.praypage as PrayView; prayview?.LoadPrayList(res); }); } break; case (int)PROTOCOL.IdPktCreateRoomRes: { CREATE_ROOM_RES res = new CREATE_ROOM_RES(); res = CREATE_ROOM_RES.Parser.ParseFrom(data.Data); if (res.VarCode != ErrorCode.Success) { break; } Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; RoomsPageView roompage = mainpage.lobby.roompage as RoomsPageView; User.RoomIdList.Add(res.VarRoomId); { User.CurrentChatViewNumber = res.VarRoomId; var chatview = new MainChatView(); mainpage.lobby.chatpage.Add(res.VarRoomId, chatview); MainChatView chatpage = chatview; mainpage.LoadView(chatpage); } }); } break; case (int)PROTOCOL.IdPktEnterRoomRes: { ENTER_ROOM_RES res = new ENTER_ROOM_RES(); res = ENTER_ROOM_RES.Parser.ParseFrom(data.Data); if (res.VarCode != ErrorCode.DuplicateEnterRoom && res.VarCode != ErrorCode.Success) { break; } Device.BeginInvokeOnMainThread(() => { try { var mainpage = (MainPage)Application.Current.MainPage; RoomsPageView roompage = mainpage.lobby.roompage as RoomsPageView; User.RoomIdList.Add(res.VarRoomId); { User.CurrentChatViewNumber = res.VarRoomId; MainChatView outivew; mainpage.lobby.chatpage.TryGetValue(res.VarRoomId, out outivew); if (outivew == null) //없으면 새로 만들어서 넣는다. { var chatview = new MainChatView(); mainpage.lobby.chatpage.Add(res.VarRoomId, chatview); mainpage.LoadView(chatview); foreach (var msg in res.VarMessages) { chatview.ReceiveMessage(msg.VarMessage, msg.VarName, msg.VarTime); } chatview.ScrollEnd(); } else //이미 존재하는 방이면 해당 방에 넣는다. { mainpage.LoadView(outivew); outivew.ScrollEnd(); } } } catch (Exception e) { } }); } break; case (int)PROTOCOL.IdPktRoomPassThroughRes: { ROOM_PASS_THROUGH_RES res = new ROOM_PASS_THROUGH_RES(); res = ROOM_PASS_THROUGH_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; MainChatView outivew; mainpage.lobby.chatpage.TryGetValue(res.VarRoomNumber, out outivew); if (outivew == null) { return; } foreach (var msg in res.VarMessages) { outivew.ReceiveMessage(msg.VarMessage, msg.VarName, msg.VarTime); } outivew.ScrollEnd(); }); } break; case (int)PROTOCOL.IdPktLeaveRoomRes: { LEAVE_ROOM_RES res = new LEAVE_ROOM_RES(); res = LEAVE_ROOM_RES.Parser.ParseFrom(data.Data); var mainpage = (MainPage)Application.Current.MainPage; Device.BeginInvokeOnMainThread(() => { MainChatView outivew; mainpage.lobby.chatpage.TryGetValue(res.VarRoomNumber, out outivew); if (outivew == null) { return; } outivew.UserList.Remove(res.VarName); if (res.VarName == User.CacheData.UserName) { User.RoomIdList.Remove(res.VarRoomNumber); mainpage.lobby.chatpage.Remove(res.VarRoomNumber); mainpage.lobby.LoadRoomPageView(); } else { MainChatView chatpage = outivew as MainChatView; chatpage.ReceiveMessage(res.VarName + " leaved.", res.VarName, Message.type.Info); } }); } break; case (int)PROTOCOL.IdPktAudioMessageRes: { AUDIO_MESSAGE_RES res = new AUDIO_MESSAGE_RES(); res = AUDIO_MESSAGE_RES.Parser.ParseFrom(data.Data); foreach (var msg in res.VarMessage) { StreamWrapper wra = new StreamWrapper(); wra.stream = new MemoryStream(msg.ToByteArray()); wra.pos = res.VarPos; AudioStream.Enqueue(wra); } } break; case (int)PROTOCOL.IdPktBitmapMessageRes: { BITMAP_MESSAGE_RES res = new BITMAP_MESSAGE_RES(); res = BITMAP_MESSAGE_RES.Parser.ParseFrom(data.Data); foreach (var msg in res.VarMessage) { StreamWrapper wra = new StreamWrapper(); wra.stream = new MemoryStream(msg.ToByteArray()); wra.pos = res.VarPos; JpegStream.Enqueue(wra); } } break; case (int)PROTOCOL.IdPktNewUserInRoomNty: { NEW_USER_IN_ROOM_NTY res = new NEW_USER_IN_ROOM_NTY(); res = NEW_USER_IN_ROOM_NTY.Parser.ParseFrom(data.Data); var mainpage = (MainPage)Application.Current.MainPage; Device.BeginInvokeOnMainThread(() => { MainChatView outivew; mainpage.lobby.chatpage.TryGetValue(res.VarRoomUser.VarRoomNumber, out outivew); if (outivew == null) { return; } outivew.UserList.Add(res.VarRoomUser.VarName); if (res.VarType == 1) { if (res.VarRoomUser.VarName != User.CacheData.UserName) { outivew.ReceiveMessage(res.VarRoomUser.VarName + " entered.", res.VarRoomUser.VarName, Message.type.Info); } } }); } break; } } catch (Exception ex) { Console.Write(ex.ToString()); } } }
static public void Loop() { if (client.socket == null || client.socket.Connected == false) { return; } CompletePacket data; if (client.PacketQueue.TryDequeue(out data) == true) { try { switch (data.Protocol) { case (int)PROTOCOL.IdPktVersionRes: { VERSION_RES res = new VERSION_RES(); res = VERSION_RES.Parser.ParseFrom(data.Data); var currentVersion = VersionTracking.CurrentVersion; double myversion; if (double.TryParse(currentVersion, out myversion) == false) { } const Double Eps = 0.000000000000001; User.Version = res.VarVersion; if (Math.Abs(res.VarVersion - myversion) > Eps) { //첫 검수라 임시 주석 2번째 패치 부터는 활성화 if (Device.RuntimePlatform == Device.Android && User.OnceVersionNotify == false) { Device.BeginInvokeOnMainThread(() => { User.OnceVersionNotify = true; DependencyService.Get <MethodExt>().Notification("New Version Updated"); }); } } SQLLiteDB.LoadCacheData(); if (User.NickName != null) { NetProcess.SendLogin(User.Uid, User.Token); } } break; case (int)PROTOCOL.IdPktLoginRes: { LOGIN_RES res = new LOGIN_RES(); res = LOGIN_RES.Parser.ParseFrom(data.Data); var mainpage = (MainPage)Application.Current.MainPage; if (res.VarCode == ErrorCode.Success) { Xamarin.Forms.DependencyService.Register <MethodExt>(); DependencyService.Get <MethodExt>().Notification("New Version Updated"); User.LoginSuccess = true; SQLLiteDB.Upsert(res.VarName, ""); if (PopupNavigation.Instance.PopupStack.Count > 0) { PopupNavigation.Instance.PopAsync(); } } else { Device.BeginInvokeOnMainThread(() => { }); User.LoginSuccess = false; } } break; case (int)PROTOCOL.IdPktRoomListRes: { ROOM_LIST_RES res = new ROOM_LIST_RES(); res = ROOM_LIST_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; }); } break; case (int)PROTOCOL.IdPktNoticeRes: { NOTICE_RES res = new NOTICE_RES(); res = NOTICE_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; }); } break; case (int)PROTOCOL.IdPktRegCameraRes: { REG_CAMERA_RES res = new REG_CAMERA_RES(); res = REG_CAMERA_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; }); } break; case (int)PROTOCOL.IdPktCameraListRes: { CAMERA_LIST_RES res = new CAMERA_LIST_RES(); res = CAMERA_LIST_RES.Parser.ParseFrom(data.Data); if (res.VarCode == ErrorCode.Success) { Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; PopupNavigation.Instance.PushAsync(new CameraListPage(res.VarCamera)); }); } } break; case (int)PROTOCOL.IdPktMailListRes: { MAIL_LIST_RES res = new MAIL_LIST_RES(); res = MAIL_LIST_RES.Parser.ParseFrom(data.Data); } break; case (int)PROTOCOL.IdPktPrayMessageRes: { } break; case (int)PROTOCOL.IdPktCameraWakeUpRes: { CAMERA_WAKE_UP_RES res = new CAMERA_WAKE_UP_RES(); res = CAMERA_WAKE_UP_RES.Parser.ParseFrom(data.Data); TargetPlayerId.Add(res.VarToPlayerId); if (PopupNavigation.Instance.PopupStack.Count == 0) { PopupNavigation.Instance.PushAsync(new CameraPage()); } else { if (PopupNavigation.Instance.PopupStack[0].GetType() != typeof(CameraPage)) { PopupNavigation.Instance.PopAsync(); PopupNavigation.Instance.PushAsync(new CameraPage()); } } } break; case (int)PROTOCOL.IdPktStopStreamRes: { STOP_STREAM_RES res = new STOP_STREAM_RES(); res = STOP_STREAM_RES.Parser.ParseFrom(data.Data); TargetPlayerId.Remove(res.VarToPlayerId); } break; case (int)PROTOCOL.IdPktCreateRoomRes: { CREATE_ROOM_RES res = new CREATE_ROOM_RES(); res = CREATE_ROOM_RES.Parser.ParseFrom(data.Data); if (res.VarCode != ErrorCode.Success) { break; } Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; User.RoomIdList.Add(res.VarRoomId); { } }); } break; case (int)PROTOCOL.IdPktEnterRoomRes: { ENTER_ROOM_RES res = new ENTER_ROOM_RES(); res = ENTER_ROOM_RES.Parser.ParseFrom(data.Data); if (res.VarCode != ErrorCode.DuplicateEnterRoom && res.VarCode != ErrorCode.Success) { break; } Device.BeginInvokeOnMainThread(() => { try { var mainpage = (MainPage)Application.Current.MainPage; } catch (Exception e) { } }); } break; case (int)PROTOCOL.IdPktRoomPassThroughRes: { ROOM_PASS_THROUGH_RES res = new ROOM_PASS_THROUGH_RES(); res = ROOM_PASS_THROUGH_RES.Parser.ParseFrom(data.Data); Device.BeginInvokeOnMainThread(() => { var mainpage = (MainPage)Application.Current.MainPage; }); } break; case (int)PROTOCOL.IdPktLeaveRoomRes: { LEAVE_ROOM_RES res = new LEAVE_ROOM_RES(); res = LEAVE_ROOM_RES.Parser.ParseFrom(data.Data); var mainpage = (MainPage)Application.Current.MainPage; Device.BeginInvokeOnMainThread(() => { }); } break; case (int)PROTOCOL.IdPktAudioMessageRes: { AUDIO_MESSAGE_RES res = new AUDIO_MESSAGE_RES(); res = AUDIO_MESSAGE_RES.Parser.ParseFrom(data.Data); foreach (var msg in res.VarMessage) { StreamWrapper wra = new StreamWrapper(); wra.stream = new MemoryStream(msg.ToByteArray()); wra.pos = res.VarPos; AudioStream.Enqueue(wra); } } break; case (int)PROTOCOL.IdPktBitmapMessageRes: { BITMAP_MESSAGE_RES res = new BITMAP_MESSAGE_RES(); res = BITMAP_MESSAGE_RES.Parser.ParseFrom(data.Data); foreach (var msg in res.VarMessage) { StreamWrapper wra = new StreamWrapper(); wra.stream = new MemoryStream(msg.ToByteArray()); JpegStream.Enqueue(wra); } } break; case (int)PROTOCOL.IdPktMpeg2TsMessageRes: { MPEG2TS_MESSAGE_RES res = new MPEG2TS_MESSAGE_RES(); res = MPEG2TS_MESSAGE_RES.Parser.ParseFrom(data.Data); foreach (var msg in res.VarMessage) { StreamWrapper wra = new StreamWrapper(); wra.stream = new MemoryStream(msg.ToByteArray()); wra.type = res.VarType; Mpeg2Stream.Enqueue(wra); } } break; case (int)PROTOCOL.IdPktNewUserInRoomNty: { NEW_USER_IN_ROOM_NTY res = new NEW_USER_IN_ROOM_NTY(); res = NEW_USER_IN_ROOM_NTY.Parser.ParseFrom(data.Data); var mainpage = (MainPage)Application.Current.MainPage; } break; } } catch (Exception ex) { Console.Write(ex.ToString()); } } }