internal override void Completed(MediatorContext mediatorContext, IClientContext clientContext, IPeerContext peerContext, OperationCompletedEventArgs oce) { ClientConst.OperationResult operationResult = oce.Result; if (operationResult == ClientConst.OperationResult.Successful) { Logger.GetLog().Info("接続が完了しました(接続数: " + peerContext.Connections + ")。"); mediatorContext.State = new ConnectedState(); } else if (operationResult == ClientConst.OperationResult.Restartable) { Logger.GetLog().Info("IPアドレスが変化しているため、再接続します。"); peerContext.DisconnectAll(); Logger.GetLog().Info("ピア接続をすべて切断しました(接続数: " + peerContext.Connections + ")"); mediatorContext.State = new DisconnectedState(); mediatorContext.Connect(); } else if (operationResult == ClientConst.OperationResult.Retryable) { // FIXME: 再試行すること。いまは放置プレイ Logger.GetLog().Info("接続に失敗しましたが、再試行可能なエラーです。"); mediatorContext.State = new DisconnectedState(); } else { throw new NotSupportedException(); } }
public void LongTimeConnectingTest() { var mediatorContext = new MediatorContext(); var maintainTimerField = mediatorContext.GetType().GetField("maintainTimer", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance); var timer = (MaintainTimer)maintainTimerField.GetValue(mediatorContext); var intervalField = timer.GetType().GetField("maintainInterval", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance); intervalField.SetValue(timer, 1000); var field = mediatorContext.GetType().GetField("clientContext", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance); var clientContextMock = new Mock <IClientContext>(); field.SetValue(mediatorContext, clientContextMock.Object); bool isCalled = false; mediatorContext.StateChanged += (s, e) => { Console.WriteLine("State: " + mediatorContext.State); if (mediatorContext.State is DisconnectedState) { isCalled = true; } }; mediatorContext.Completed += (s, e) => { }; mediatorContext.ConnectionsChanged += (s, e) => { }; mediatorContext.Connect(); int waitSeconds = 120; while (waitSeconds-- > 0 && !isCalled) { Thread.Sleep(1000); } Assert.IsTrue(isCalled); }
private static void BootP2PQuake(bool localMode) { // ViewModel を取得したりイベントハンドラをくっつけたりする while (viewModel == null) { try { App.Current.Dispatcher.Invoke(() => { if (App.Current?.MainWindow?.DataContext != null) { var window = (MainWindow)App.Current?.MainWindow; viewModel = (RootViewModel)window?.DataContext; viewModel.SettingViewModel.LoadFromConfiguration(ConfigurationManager.Configuration); window.OnExit += Window_OnExit; window.OnUserquake += Window_OnUserquake; } }); } catch { // nothing to do } Thread.Sleep(1000); } ; client = new MediatorContext(); client.ConnectionsChanged += Client_ConnectionsChanged; client.StateChanged += Client_StateChanged; client.OnAreapeers += Client_OnAreapeers; client.OnEarthquake += Client_OnEarthquake; client.OnTsunami += Client_OnTsunami; client.OnEEWTest += Client_OnEEWTest; client.OnNewUserquakeEvaluation += Client_OnNewUserquakeEvaluation; client.OnUpdateUserquakeEvaluation += Client_OnUpdateUserquakeEvaluation; configuration.OnChangeEPSPConfiguration += (s, e) => { ReflectEPSPConfiguration(); }; ReflectEPSPConfiguration(); notifier = new Notifier(configuration, client); activator = new Notifications.Activator(configuration, client); player = new Player(configuration, client); if (localMode) { // 検証鍵をテスト用のものに差し替える var verifierType = Type.GetType("PKCSPeerCrypto.Verifier, PKCSPeerCrypto"); var serverProofKey = verifierType.GetField("ServerProofKey", BindingFlags.NonPublic | BindingFlags.Static); serverProofKey.SetValue(null, "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDB+t0YTWlu3FFiwTb05u2bHWJRpCQJeAzhia6pWJ5BqsVIXgG7zeiHu4cFWrKME7fHQsjlihjnhtaksEtkmnbODUHnNi26FStSSpyo8ex0FZDfXtoQ9VB0m6UxdrGznpzfO9PWbpC0iSoCAyeqILLcDDbuBv5xY6+0D35kQx74kQIDAQAB"); client.Verification = false; // P2P 地震情報ネットワークに接続せず、 localhost:6910 に接続する var field = client.GetType().GetField("peerContext", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); var peerContext = field.GetValue(client); var peerDataType = Type.GetType("Client.Common.General.PeerData, Client"); var peerData = System.Activator.CreateInstance(peerDataType, new object[] { "localhost", 6910, 10 }); var peerDatas = Array.CreateInstance(peerDataType, 1); peerDatas.SetValue(peerData, 0); var connectMethod = Type.GetType("Client.Peer.Context, Client").GetMethod("Connect"); connectMethod.Invoke(peerContext, new object[] { peerDatas }); return; } client.Connect(); ReadHistories(); }
public override Task <BoolResponse> Connect(Empty request, ServerCallContext context) { return(Task.FromResult(new BoolResponse { Result = _m.Connect() })); }