private void button2_Click(object sender, EventArgs e) { if (button2.Text == "取消预约") { if (RushSeat.CancelReservation(RushSeat.resID)) { button2.Enabled = false; } } if (button2.Text == "结束使用") { if (RushSeat.StopUsing()) { button2.Enabled = false; } } if (button2.Text != "取消预约" && button2.Text != "结束使用") { config.textBox1.AppendText("程序出现逻辑BUG,请联系开发者"); } }
public static void run() { Config.config.button2.Enabled = false; int count = 0; int wrong_count = 0; success = false; while (true) { bool get_list = false; //逻辑BUG 每次循环应重置 if (RushSeat.stop_rush == true) { Config.config.textBox1.AppendText("用户取消抢座\r\n"); Config.config.textBox1.AppendText("-------------------------------------------\r\n"); Config.config.button1.Text = "开始抢座"; RushSeat.stop_rush = false; return; } Config.config.textBox1.AppendText("即将开始第 " + (++count).ToString() + " 次检索...\r\n"); //移除之前的空座列表 RushSeat.freeSeats.Clear(); lastFreeSeatCount = RushSeat.freeSeats.Count; //单个房间检索 if (Config.config.comboBox4.SelectedIndex != 0 && Config.config.comboBox4.SelectedIndex != 1 && Config.config.comboBox4.SelectedIndex != 2) { //获取房间空座列表 string stat = ""; stat = RushSeat.SearchFreeSeat(buildingID, roomID, date, startTime, endTime); //成功检索到空座以及没有符合条件座位但是勾选了改抢附近座位 if (stat == "Success" || (stat == "NoMatchSeat" && Config.config.checkBox5.Checked == true)) { Config.config.textBox1.AppendText("单一房间模式下检索到符合条件空座列表,开始尝试预约...\r\n"); get_list = true; } //如果没有勾选可以改抢附近座位并且是指定座位情况下,直接跳出该循环 if (stat == "NoMatchSeat" && Config.config.checkBox5.Checked != true) { Config.config.textBox1.AppendText("没有勾选改抢附近座位选项,进行下一轮抢座...\r\n"); } } else //特殊模式,例如全馆检索 { switch (Config.config.comboBox4.SelectedIndex) { case 0: { foreach (string mroomID in RushSeat.roomList_b1) { if (RushSeat.SearchFreeSeatMulti(buildingID, mroomID, date, startTime, endTime) == "Success") { get_list = true; break; } Thread.Sleep(repeatSearchInterval); if (RushSeat.stop_rush == true) { Config.config.textBox1.AppendText("用户取消抢座\r\n"); Config.config.textBox1.AppendText("-------------------------------------------\r\n"); Config.config.button1.Text = "开始抢座"; RushSeat.stop_rush = false; return; } } break; } case 1: { foreach (string mroomID in RushSeat.roomList_f1) { if (RushSeat.SearchFreeSeatMulti(buildingID, mroomID, date, startTime, endTime) == "Success") { get_list = true; break; } Thread.Sleep(repeatSearchInterval); if (RushSeat.stop_rush == true) { Config.config.textBox1.AppendText("用户取消抢座\r\n"); Config.config.textBox1.AppendText("-------------------------------------------\r\n"); Config.config.button1.Text = "开始抢座"; RushSeat.stop_rush = false; return; } } break; } case 2: { foreach (string mroomID in RushSeat.roomList_f2t4) { if (RushSeat.SearchFreeSeatMulti(buildingID, mroomID, date, startTime, endTime) == "Success") { get_list = true; break; } Thread.Sleep(repeatSearchInterval); if (RushSeat.stop_rush == true) { Config.config.textBox1.AppendText("用户取消抢座\r\n"); Config.config.textBox1.AppendText("-------------------------------------------\r\n"); Config.config.button1.Text = "开始抢座"; RushSeat.stop_rush = false; return; } } break; } } } //如果检索到空座 if (get_list == true) { //阶级等待 if (Config.rank != 'A') { Thread.Sleep(rankSuccessGetFreeSeat); } //先释放当前座位 string resInfo = RushSeat.CheckHistoryInf(false); if (resInfo == "RESERVE") { if (RushSeat.CancelReservation(RushSeat.resID) != true) { Config.config.textBox1.AppendText("释放座位失败,请手动重试..."); Config.config.comboBox1.Enabled = true; Config.config.comboBox2.Enabled = true; Config.config.comboBox3.Enabled = true; Config.config.comboBox4.Enabled = true; Config.config.comboBox5.Enabled = true; return; } } if (resInfo == "CHECK_IN" || resInfo == "AWAY") { if (RushSeat.StopUsing() != true) { Config.config.textBox1.AppendText("释放座位失败,请手动重试..."); Config.config.comboBox1.Enabled = true; Config.config.comboBox2.Enabled = true; Config.config.comboBox3.Enabled = true; Config.config.comboBox4.Enabled = true; Config.config.comboBox5.Enabled = true; return; } } foreach (string seatID in RushSeat.freeSeats) { string status_1 = RushSeat.BookSeat(seatID, date, startTime, endTime); //bool outloop = false; int count_1 = 0; if (status_1 == "Success") { success = true; break; } //间隔 Thread.Sleep(500); //如果在系统开放的前后3s内没抢到座位,即使座位还在,也会自动改签 //所以说要注意系统的时间 while (status_1 == "NotAtTime" && count_1 < 10) { count_1 = count_1 + 1; //真的服了 status_1 = RushSeat.BookSeat(seatID, date, startTime, endTime); if (status_1 == "Success") { success = true; break; } else if (status_1 == "NotAtTime") { Config.config.textBox1.AppendText("系统尚未开放...\r\n"); Thread.Sleep(500); } //status_1 = RushSeat.BookSeat(seatID, date, startTime, endTime); //放在这里就GG了 } //如果成功抢座就跳出foreach循环,如果是抢座失败就根据情况进行下一步操作 if (success == true) { break; } else //这种情况是没抢过别人,但是这个循环被多重抢座、指定抢座共同使用,不能再根据是否勾选改签来改选,只能先将就一下,指定座位模式下自动改签 { Thread.Sleep(500); Config.config.textBox1.AppendText("座位ID " + seatID.ToString() + " 预约失败,尝试预约下一个座位\r\n"); } } //成功抢座后自动关机 if (success == true) { //静默检查预约信息,激活释放按钮 RushSeat.CheckHistoryInf(false); //窗口弹出 if (Config.config.Visible != true) { Config.config.Visible = true; } Config.config.WindowState = FormWindowState.Normal; //发短信 if (Config.config.checkBox4.Checked) { Config.config.textBox1.AppendText("短信已发送,返回值:\r\n" + RushSeat.SendMessage() + "\r\n"); Config.config.textBox1.AppendText("若返回值小于0为发送失败,请联系开发者\r\n"); Config.config.textBox1.AppendText("------------------------------------------\r\n"); } if (Config.config.checkBox3.Checked) { Config.config.textBox1.AppendText("2min后自动关机\r\n"); Config.config.textBox1.AppendText("如果想取消自动关机请在桌面用快捷键win + R启动控制台, 在控制台自行输入 shutdown -a\r\n"); Config.config.textBox1.AppendText("-----------------------------------------------------\r\n"); Process.Start("shutdown.exe", "-s -t " + "120"); } else { //Config.config.textBox1.AppendText("订座成功"); } Config.config.button1.Text = "开始抢座"; Config.config.comboBox1.Enabled = true; Config.config.comboBox2.Enabled = true; Config.config.comboBox3.Enabled = true; Config.config.comboBox4.Enabled = true; Config.config.comboBox5.Enabled = true; break; } else { //有空座但是抢座失败(别人手快或者碰到更高级的了) wrong_count++; Config.config.textBox1.AppendText("*****预约失败," + (((double)repeatSearchInterval) / 1000).ToString() + "s后重新开始检索...*****\r\n"); get_list = false; if (wrong_count == 5) { Config.config.textBox1.AppendText("多次抢座失败,为防止封号中止抢座\r\n"); Config.config.textBox1.AppendText("这种情况不常见,请保存工作记录并联系开发者\r\n"); Config.config.comboBox1.Enabled = true; Config.config.comboBox2.Enabled = true; Config.config.comboBox3.Enabled = true; Config.config.comboBox4.Enabled = true; Config.config.comboBox5.Enabled = true; return; } } } Thread.Sleep(repeatSearchInterval); preventCount++; //if (preventCount == 30) //{ // Config.config.textBox1.AppendText("防止被封,睡眠10s..........\r\n"); // Thread.Sleep(10000); // preventCount = 0; //} } }