Ejemplo n.º 1
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;
            }
        }
Ejemplo n.º 2
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++;
                }
            }
        }