/// 通信処理終了時に呼ばれるメソッド private void DidLoad(NetConnector con) { // 通信終了イベント後を1つの通信終了とする. if (this.DidEnd == null) { this.DidLoadEndProc(con); con.Dispose(); } else { // 通信終了イベントが設定されている場合、ながく終了デリゲートが呼ばれない場合がある。終了デリゲートが返って来るまでは次以降に来る結果を遅延しとく. m_endEventWaitList.Enqueue(con); } }
/// 更新処理:通信終了イベント待ちキュー private void UpdateEndEventWaitList() { if (m_bNowEndEventWait || m_endEventWaitList.Count <= 0) { return; } m_bNowEndEventWait = true; NetConnector con = m_endEventWaitList.Dequeue(); this.DidEnd(con, delegate { this.DidLoadEndProc(con); con.Dispose(); m_bNowEndEventWait = false; }); }
public void Work() { DX.DrawBox(0, 0, 800, 800, DX.GetColor(0, 200, 200), 1); ParseInput(); ShowMenu(); // メニュー選択 if (z.IsDown && (cntr == null || !cntr.IsWaiting)) { switch (selectIndex) { case 0: // キャストをErrorモナドに包む var error = new Monads.Error <int>(() => int.Parse(Interaction.InputBox("Input port.", "Server create", 10800.ToString(), -1, -1))); // エラーでないなら開始 if (!error.IsError) { cntr = new NetConnector(StartType.Server, error.Value); cntr.Start(); } break; case 1: var input = Interaction.InputBox("Input hostname:port", "Connect", "localhost:10800", -1, -1); // キャストとSplitをErrorモナドに包む var error2 = new Monads.Error <Tuple <int, string> >(() => Tuple.Create(int.Parse(input.Split(':')[1]), input.Split(':')[0])); // エラーでないなら開始 if (!error2.IsError) { cntr = new NetConnector(StartType.Client, error2.Value.Item1, error2.Value.Item2); cntr.Start(); } break; case 2: // キャストとIOとSplitをErrorモナドに包む var error3 = new Monads.Error <Tuple <int, string> >(() => { using (var reader = new StreamReader(File.Open("IPAddress.txt", FileMode.OpenOrCreate))) { var input2 = reader.ReadLine(); return(Tuple.Create(int.Parse(input2.Split(':')[1]), input2.Split(':')[0])); } }); // エラーでないなら開始 if (!error3.IsError) { cntr = new NetConnector(StartType.Client, error3.Value.Item1, error3.Value.Item2); cntr.Start(); } break; } } // 接続待ち中にキャンセル if (x.IsHold && cntr != null && cntr.IsWaiting) { cntr.Dispose(); cntr = null; } // 接続されたら本編に移動 if (cntr != null && cntr.IsConnected) { GameMain.ChangeScene(new Promotion(cntr)); } }