Ejemplo n.º 1
0
        static async Task Main(string[] args)
        {
            // Register for GB2312 encoding
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            // Configurate notifier
            if (!File.Exists(SCKEYFileName) || File.ReadAllText(SCKEYFileName).Trim().Equals(""))
            {
                File.Create(SCKEYFileName);
                Console.WriteLine(@"Please configurate your SCKEY in file """ + SCKEYFileName + @""", you can generate your unique SCKEY from http://sc.ftqq.com/.");
                return;
            }
            string SCKEY = File.ReadAllText(SCKEYFileName).Trim();

            wechatNotifier = new WechatNotifier(SCKEY);
            Console.WriteLine($"{DateTime.Now} | SCKEY = {SCKEY}");

            // Start
            int  errTime = 0;
            bool sentErr = false;

            while (true)
            {
                List <string> USTCList = await GetUSTCList();

                if (USTCList.Count == 0)
                {
                    errTime++;
                    // Only send once every error period.
                    if (errTime >= 10 && !sentErr)
                    {
                        sentErr = wechatNotifier.SendNotifier("[异常] USTCLIST 获取失败", "USTC List 已连续 10 次获取失败,请检查调试!");
                    }
                    Console.WriteLine($"[Err] {DateTime.Now} Failed to get list.");
                    continue;
                }
                // Reset error send status.
                errTime = 0; sentErr = false;
                UpdateListAndNotify(USTCList);
                System.Threading.Thread.Sleep(15000);
            }
        }
Ejemplo n.º 2
0
        public void AddReservationNotifyWechatMessage(String playerId, String operatorId, String result, Pool targetPool, Pool originalPool, DateTime gameDate)
        {
            if (IsReservationLocked(gameDate))
            {
                return;
            }
            Player player = FindPlayerById(playerId);
            //if (player.Marked && result == Constants.CANCELLED) return;
            Player user    = operatorId == null ? null : FindPlayerById(operatorId);
            String message = null;
            int    numberOfReservedPlayerInTargetPool = targetPool.FindGameByDate(gameDate).NumberOfReservedPlayers;

            String poolAndGameDate = " of the " + targetPool.DayOfWeek + " volleyball on " + gameDate.ToString("MM/dd/yyyy") + " in pool " + targetPool.Name + ".";
            String playerNumber    = " Total player number in pool : " + numberOfReservedPlayerInTargetPool;

            if (result == Constants.RESERVED || result == Constants.CANCELLED)
            {
                if (playerId == operatorId)
                {
                    message = "You " + result.ToString() + poolAndGameDate;
                }
                else
                {
                    message = (user == null ? "Admin" : user.Name) + " " + result.ToString() + poolAndGameDate;
                }
                if (EastDateTimeToday.AddDays(7) < gameDate)
                {
                    WechatNotifier.AddNotifyWechatMessage(targetPool, player, message);
                }
                else
                {
                    message = message + playerNumber;
                    Game game = targetPool.FindGameByDate(gameDate);
                    if (game.Factor > 0)
                    {
                        message = message + ". Current factor is " + game.Factor;
                    }
                    WechatNotifier.AddNotifyWechatMessage(targetPool, player, message);
                    if (player.Role != (int)Roles.Guest && result == Constants.RESERVED && wechatNotifier.EnableReserveEmoMessage)
                    {
                        int emoType = (int)EmoTypes.Reserve;
                        WechatNotifier.AddNotifyWechatMessage(targetPool, player, wechatNotifier.GetEmoMessage(emoType, numberOfReservedPlayerInTargetPool));
                    }
                    if (player.Role != (int)Roles.Guest && result == Constants.CANCELLED && wechatNotifier.EnableCancelEmoMessage)
                    {
                        int emoType = (int)EmoTypes.Cancel;
                        WechatNotifier.AddNotifyWechatMessage(targetPool, player, wechatNotifier.GetEmoMessage(emoType, numberOfReservedPlayerInTargetPool));
                    }
                }
            }
            else if (result == Constants.WAITING_TO_RESERVED)
            {
                message = "Congratus! One spot became available in pool " + targetPool.Name + ", and reserved it for you." + playerNumber;
                Game game = targetPool.FindGameByDate(gameDate);
                if (game.Factor > 0)
                {
                    message = message + ". Current factor is " + game.Factor;
                }
                WechatNotifier.AddNotifyWechatMessage(player, message);
                if (EastDateTimeToday == gameDate.Date && EastDateTimeNow.Hour >= lockWaitingListHour)
                {
                    WechatNotifier.AddNotifyWechatMessage(player, "It is kind of late, if you cannot make it, please cancel it right away. Thank you!");
                }
                WechatNotifier.AddNotifyWechatMessage(targetPool, player, message);
            }
            else if (result == Constants.MOVED)
            {
                message = result.ToString() + " from pool " + originalPool.Name + " to pool " + targetPool.Name + " for the " + targetPool.DayOfWeek + " volleyball on " + gameDate.ToString("MM/dd/yyyy");
                WechatNotifier.AddNotifyWechatMessage(player, message);
                String wechatMessage = message + ". Total player number in pool " + originalPool.Name + ": " + originalPool.FindGameByDate(gameDate).NumberOfReservedPlayers;
                Game   game          = originalPool.FindGameByDate(gameDate);
                if (game.Factor > 0)
                {
                    wechatMessage = wechatMessage + ". Current factor is " + game.Factor;
                }
                WechatNotifier.AddNotifyWechatMessage(originalPool, player, wechatMessage);
                wechatMessage = message + ". Total player number in pool " + targetPool.Name + ": " + numberOfReservedPlayerInTargetPool;
                game          = targetPool.FindGameByDate(gameDate);
                if (game.Factor > 0)
                {
                    wechatMessage = wechatMessage + ". Current factor is " + game.Factor;
                }
                WechatNotifier.AddNotifyWechatMessage(targetPool, player, wechatMessage);
                if (wechatNotifier.EnableReserveEmoMessage)
                {
                    WechatNotifier.AddNotifyWechatMessage(targetPool, player, wechatNotifier.GetEmoMessage((int)EmoTypes.Move, numberOfReservedPlayerInTargetPool));
                }
            }
            else if (result == Constants.WAITING)
            {
                message = (user == null ? "Admin" : (playerId == operatorId? "You" : user.Name)) + " " + result.ToString();
                WechatNotifier.AddNotifyWechatMessage(targetPool, player, message + poolAndGameDate);
            }
        }
Ejemplo n.º 3
0
        private void Timer_Tick(object sender, EventArgs e)
        {
            // Update stock list current price information
            Share share = null;

            foreach (ListViewItem lvi in listView_StockList.Items)
            {
                share = GetShareByCode(lvi.Text);
                // if (!IsTradingTime(share.shareData.dataTime)) continue;
                lvi.SubItems[subitemIndex_CurrentPrice].Text = share.shareData.currentPrice;
                if (lvi.SubItems[subitemIndex_CurrentPrice].Text != "")
                {
                    int   warningType  = -1;
                    float currentPrice = float.Parse(lvi.SubItems[subitemIndex_CurrentPrice].Text);
                    float upPrice      = lvi.SubItems[subitemIndex_UpPrice].Text == "" ? 0 : float.Parse(lvi.SubItems[subitemIndex_UpPrice].Text);
                    float downPrice    = lvi.SubItems[subitemIndex_DownPrice].Text == "" ? 0 : float.Parse(lvi.SubItems[subitemIndex_DownPrice].Text);

                    if (currentPrice == 0)
                    {
                        continue;
                    }

                    // Warning Type jugement
                    if (upPrice != 0 && upPrice <= currentPrice)
                    {
                        warningType = 0;
                    }
                    if (downPrice != 0 && downPrice >= currentPrice)
                    {
                        warningType = 1;
                    }

                    if (warningType != -1)
                    {
                        // Highlight warning item in listview
                        lvi.ForeColor = warningType == 0 ? Color.Red : Color.Green;

                        if (!WarningMessageBox.isShareBind(share))
                        {
                            // Wechat notify
                            int            retry          = 3;
                            string         title          = "[" + share.shareInfo.shareUrlCode + "] " + share.shareData.shareName + " 触发" + (warningType == 0 ? "上" : "下") + "破价格 " + lvi.SubItems[subitemIndex_DownPrice].Text;
                            string         content        = title + ", 现价 " + share.shareData.currentPrice;
                            WechatNotifier wechatNotifier = new WechatNotifier(Notify_SCKEY);
                            if (wechatNotify.Checked)
                            {
                                int i = 1;
                                for ( ; i <= retry; i++)
                                {
                                    if (wechatNotifier.SendNotifier(title, content))
                                    {
                                        break;
                                    }
                                }
                                if (i > retry)
                                {
                                    Console.WriteLine("微信提醒失败,请检查 SCKEY 是否填写正确");
                                }
                            }

                            // Create Warning Messagebox
                            WarningMessageBox msg = new WarningMessageBox(share, warningType, lvi.SubItems[subitemIndex_DownPrice].Text, this);
                            msg.Show();
                        }

                        // Play sound
                        warningdPlayer.Play();
                    }
                    else
                    {
                        lvi.ForeColor = Color.Black;
                    }
                }
            }

            // Update Infomation Panal
            if (Get2DisplayShareInfomationByCode(textBox_StockCode.Text))
            {
                this.Text = Formtitle + " (Stock data has update: " + System.DateTime.Now.ToLongDateString() + " " + System.DateTime.Now.ToLongTimeString() + " )";
            }
            else
            {
                this.Text = Formtitle + " (Request Error!)";
                pictureBox_StockImage.Image = null;
            }
            if (--GCTimeFlow < 0)
            {
                GC.Collect();
                GCTimeFlow = GCTime;
            }

            // Update notifyIcon text
            int bindCount = WarningMessageBox.getBindCount();

            if (bindCount == 0)
            {
                notifyIcon1.Text = "当前无预警触发";
            }
            else
            {
                notifyIcon1.Text = "当前有" + String.Concat(bindCount) + "条预警被触发!";
            }
        }