Example #1
0
 /// 通信処理終了時に呼ばれるメソッド
 private void DidLoad(NetConnector con)
 {
     // 通信終了イベント後を1つの通信終了とする.
     if (this.DidEnd == null)
     {
         this.DidLoadEndProc(con);
         con.Dispose();
     }
     else
     {
         // 通信終了イベントが設定されている場合、ながく終了デリゲートが呼ばれない場合がある。終了デリゲートが返って来るまでは次以降に来る結果を遅延しとく.
         m_endEventWaitList.Enqueue(con);
     }
 }
Example #2
0
    /// 更新処理:通信終了イベント待ちキュー
    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;
        });
    }
Example #3
0
        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));
            }
        }