/// <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)); } }
/// <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]); }
/// <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); }