예제 #1
0
        /// <summary>
        /// ラインの部屋で
        /// シグナルを受け取る部屋に新着があるか、
        /// 又はコマンド部屋での新しい入力を受け付けるまで待つ
        /// </summary>
        /// <param name="Line">ラインオブジェクト</param>
        /// <returns></returns>
        private static string WaitLineGroupsNewArraival(LINEControl Line)
        {
            // ラインに切り替える
            Line.IsActivate();

            // 子機かどうか?
            if (Constants.LINE_RECEIVER_SIDE)
            {
                return(WaitLineGroupsByReciever(Line));
            }
            else
            {
                // 親機の時
                return(WaitLineGroupsByParent(Line));
            }
        }
예제 #2
0
        /// <summary>
        /// 子機用ライングループ 待機処理
        /// </summary>
        /// <param name="Line"></param>
        /// <returns></returns>
        private static string WaitLineGroupsByReciever(LINEControl Line)
        {
            Line.IsActivate();
            Line.ChatRoomListScrollTop();

            //var tasks = new List<Task>();
            string ret = string.Empty;

            string[] roomNames;

            roomNames = new string[] {
                Constants.ROOM_NAME_BoSignal
            };

            var task1 = Task.Run(() => Line.WaitRoomNewArrivals(roomNames[0]));

            // 着信が来るまでまつ
            int taskNum = Task.WaitAny(task1);

            // 対象のシグナル、又は入力された部屋
            return(roomNames[taskNum]);
        }
예제 #3
0
        /// <summary>
        /// 親機用ライングループ 待機処理
        /// </summary>
        /// <param name="Line">ラインオブジェクト</param>
        /// <returns></returns>
        private static string WaitLineGroupsByParent(LINEControl Line)
        {
            // ライン部屋
            Line.IsActivate();

            // TODO:待機用の部屋をアクティブにして待つ(LINE新着の数字を取得するため) 
            // 今は仮でデバッグ部屋にする
            Line.RoomAvtive(Constants.ROOM_NAME_DebugRoomName);
            Line.ChatRoomListScrollTop();

            //var tasks = new List<Task>();
            string ret = string.Empty;

            string[] roomNames;

            //roomNames = new string[] {
            //                    Constants.ROOM_NAME_RISE,
            //                    Constants.ROOM_NAME_AUXESIS,
            //                    Constants.ROOM_NAME_CmdLine,
            //                    Constants.ROOM_NAME_MIYU };
            roomNames = new string[] {
                "",
                Constants.ROOM_NAME_AUXESIS,
                Constants.ROOM_NAME_CmdLine,
                Constants.ROOM_NAME_SignalMeijin
            };

            var task1 = Task.Run(() => Line.WaitRoomNewArrivals(roomNames[0]));
            var task2 = Task.Run(() => Line.WaitRoomNewArrivals(roomNames[1]));
            var task3 = Task.Run(() => Line.WaitRoomNewArrivals(roomNames[2]));
            var task4 = Task.Run(() => Line.WaitRoomNewArrivals(roomNames[3]));

            // 何れかに着信が来るまでまつ
            int taskNum = Task.WaitAny(task1, task2, task3, task4);

            // 帰ってきた値の部屋が本当に新着があるか確認する
            if (Line.ConfirmIsRoomsNewArrivals(roomNames[taskNum]))
            {
                ret = roomNames[taskNum];
            }
            else
            {
                ret = string.Empty;

                // 来ていない、又は来ていたが無しと判断されたとき(TODO:原因不明 要調査)
                for (int i = 0; i < roomNames.Length; i++)
                {
                    // 1つずつ見て本当になかったか確認する
                    if (Line.ConfirmIsRoomsNewArrivals(roomNames[i]))
                    {
                        // debug
                        CommonControl.DebugPrint("WaitLineGroupsByParent", "自身で見に行って発見した", roomNames[i]);

                        // 実は見つかった時
                        ret = roomNames[i];
                        break;
                    }
                }
            }

            // 対象のシグナル1の着信
            return(ret);
        }