private void connectServerBtn_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            ConnectionManager.Instance.ConnectionInfo.CurrentServer.AccessCode = Convert.ToInt16(accessCodeTxtBox.Text.Trim());
            ConnectionManager.Instance.ConnectServer(
                SettingManager.Instance.SettingInfo.DeviceType,
                new CallbackHandler((object serverExtraInfo) =>
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    if (ConnectionManager.Instance.IsConnected)
                    {
                        AppStateUtils.Set(Constant.KEY_SERVER_EXTRA_INFO, serverExtraInfo);
                        this.NavigationService.RemoveBackEntry();
                        this.NavigationService.GoBack();
                    }
                    else
                    {
                        //프로그레스바 숨김
                        UIUtils.SetVisibility(connectProgressBar, false);
                        UIUtils.SetVisibility(labelProgressBar, false);

                        MessageBox.Show(I18n.GetString("AppMessageAccessCodeIncorrect"), I18n.GetString("AppMessageNotification"), MessageBoxButton.OK);
                        accessCodeTxtBox.Text = string.Empty;
                        //역시 시간차 공격..
                        bgWorker.RunWorkerAsync();
                    }
                });
            }));
            //프로그레스바 표시
            UIUtils.SetVisibility(connectProgressBar, true);
            UIUtils.SetVisibility(labelProgressBar, true);
        }
Beispiel #2
0
        //메인 페이지에 진입했을때 발생되는 이벤트 재정의
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            isLoaded = false;
            base.OnNavigatedTo(e);

            if (e.NavigationMode == NavigationMode.Back)
            {
                if (AppStateUtils.ContainsRecoveryType(RecoveryTypes.Connection))
                {
                    ConnectionManager.Instance.ConnectServer(
                        PointingControlManager.Instance.DeviceType,
                        new CallbackHandler((object param) =>
                    {
                        CallbackConnectServer(param);
                        //복구 모드 삭제
                        AppStateUtils.ClearRecoveryTypes();
                    }));
                }
                else
                {
                    ServerExtraInfo seInfo = (ServerExtraInfo)AppStateUtils.Get(Constant.KEY_SERVER_EXTRA_INFO);
                    if (seInfo != null)
                    {
                        //접속후 돌아온 경우
                        txtInfomation.Text = I18n.GetString("ServerConnectPageConnecting");
                        CallbackConnectServer(seInfo);
                        AppStateUtils.Remove(Constant.KEY_SERVER_EXTRA_INFO);
                    }
                    else
                    {
                        if (!ConnectionManager.Instance.IsConnected)
                        {
                            UpdateUIElements();
                        }
                        else
                        {
                            //접속이 되어 있으면 접속된 정보를 저장
                            if (SettingManager.Instance.SettingInfo.AutoConnect)
                            {
                                ConnectionManager.Instance.SaveLastConnectedServer(PointingControlManager.Instance.DeviceType);
                            }
                            //버튼 복구
                            UIUtils.SetVisibility(btnMenu, true);
                            UIUtils.SetVisibility(btnKeyboard, true);
                        }
                    }
                }
            }
            else
            {
                isLoaded = true;
            }
        }
        private void connectAppbarIconBtn_Click(object sender, EventArgs e)
        {
            //네트워크 연결체크
            if (!NetworkUtils.IsNetworkAvailable)
            {
                NetworkUtils.ShowWiFiSettingPage(I18n.GetString("AppMessageRequiredDataNetwork"), I18n.GetString("AppMessageNotification"));
                return;
            }

            //현재 접속되어 있는 서버가 있다면 종료시킴.
            if (ConnectionManager.Instance.IsConnected)
            {
                ConnectionManager.Instance.DisconnectServer(null);
            }

            //선택된 서버 정보를 현재 서버로 변경
            ServerInfo serverInfo = (ServerInfo)historyItemViewOnPage.SelectedItem;

            ConnectionManager.Instance.ConnectionInfo.CurrentServer = serverInfo;

            ConnectionManager.Instance.ConnectServer(
                SettingManager.Instance.SettingInfo.DeviceType,
                new CallbackHandler((object serverExtraInfo) =>
            {
                Deployment.Current.Dispatcher.BeginInvoke(() =>
                {
                    if (serverExtraInfo is ServerExtraInfo)
                    {
                        ServerExtraInfo svrExtInfo = serverExtraInfo as ServerExtraInfo;
                        AppStateUtils.Set(Constant.KEY_SERVER_EXTRA_INFO, svrExtInfo);
                        this.NavigationService.GoBack();
                    }
                    else if (serverExtraInfo is SocketError)
                    {
                        if ((SocketError)serverExtraInfo == SocketError.TimedOut)
                        {
                            MessageBox.Show(I18n.GetString("AppMessageNotAbleConnectPC"));
                            (SearchPivot.Parent as Pivot).SelectedIndex = 0;
                        }
                    }
                    else
                    {
                        MessageBox.Show(I18n.GetString("AppMessageAccessCodeIncorrect"));
                        //접속코드 입력 화면으로 이동
                        this.NavigationService.Navigate(new Uri(string.Format(Constant.PAGE_SERVER_CONNECT, serverInfo.ServerName), UriKind.Relative));
                    }
                });
            }));
        }
Beispiel #4
0
        public static void Deactivated(DeactivatedEventArgs e)
        {
            ConnectionInfo connInfo = ConnectionManager.Instance.ConnectionInfo;

            //연결 상태였다면 리커버리 모드 셋팅
            if (connInfo.CurrentServer != null && connInfo.CurrentServer.IsConnected)
            {
                //소켓을 끊김 상태로 변경
                connInfo.CurrentServer.IsConnected = false;
                //복구 모드 설정
                AppStateUtils.AddRecoveryType(Apps.WowPad.Type.RecoveryTypes.Connection);
                //터치스크린이었다면 화면 복구 설정
                if (PointingControlManager.Instance.DeviceType == Apps.WowPad.Type.DeviceTypes.TouchScreen)
                {
                    AppStateUtils.AddRecoveryType(Apps.WowPad.Type.RecoveryTypes.BackgroundImage);
                }
            }
        }
Beispiel #5
0
        private void CheckConnectionThreadFn()
        {
            int batterySwitch = 1;
            int checkTime     = 5000; //초기 5초 셋팅

            while (true)
            {
                if (!NetworkUtils.IsNetworkAvailable)
                {
                    if (ConnectionManager.Instance.IsConnected)
                    {
                        //접속중 WiFi가 연결이 끊긴경우 접속 해제 처리
                        UpdateConnectionStatus(false);
                    }
                    else if (AppStateUtils.ContainsRecoveryType(RecoveryTypes.Connection))
                    {
                        //접속중 WiFi가 연결이 끊긴경우 접속 해제 처리
                        UpdateConnectionStatus(false);
                        AppStateUtils.ClearRecoveryTypes();
                    }
                }
                else
                {
                    //2. 커넥션 체크 (접속되었을때 체크시작, 접속해지후 체크종료)
                    if (ConnectionManager.Instance.IsConnected)
                    {
                        checkTime = 3000;   //체크 간격을 3초로 줄임
                        //쓰레드 대기 준비
                        connCheckDone.Reset();
                        //체크결과 요청
                        System.Net.Sockets.SocketError socketError = (System.Net.Sockets.SocketError)ConnectionManager.Instance.CheckConnection(SettingManager.Instance.SettingInfo,

                                                                                                                                                new CallbackHandler((object param) =>
                        {
                            Deployment.Current.Dispatcher.BeginInvoke(() =>
                            {
                                //쓰레드 재계
                                connCheckDone.Set();

                                if (ConnectionManager.Instance.IsConnected)
                                {
                                    ServerExtraInfo serverStatusInfo = param as ServerExtraInfo;
                                    if (VersionUtils.IsPresentation)
                                    {
                                        SetScreenMode(serverStatusInfo.ScreenType);
                                    }
                                }
                                else
                                {
                                    UpdateDisconnectUI();

                                    if (MessageBox.Show(I18n.GetString("AppMessageDisconnectedFromPC"), I18n.GetString("AppMessageConfirm"), MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                                    {
                                        NavigationService.Navigate(ResourceUri.ServerListPageUri);
                                    }
                                }
                            });
                        }));
                        //쓰레드 대기
                        if (!connCheckDone.WaitOne(10000))
                        {
                            //Deployment.Current.Dispatcher.BeginInvoke(() =>
                            //    {
                            //        MessageBox.Show("타임아웃 발생");
                            //    });
                        }
                    }
                    else
                    {
                        checkTime = 10000;  //체크 간격을 10초로 늘림
                    }
                }
                //위치가 위로가면 블록킹 걸리는 경우가 있는것 같다.
                Thread.Sleep(checkTime);
                //배터리는 대략 1 ~ 2분에 한번 체크
                if (batterySwitch == 20)
                {
#if !WP7
                    DeviceInfo.Battery = Windows.Phone.Devices.Power.Battery.GetDefault().RemainingChargePercent;
#endif
                    batterySwitch = 1;
                }
                else
                {
                    batterySwitch++;
                }
            }
        }