Exemple #1
0
        // Главный поток для формировния и отправки сообщений.
        // Сообщения отправляются в локальную базу и в брокер сообщений.
        public static void SenderThread()
        {
            ClassForRabbit   rabbit = new ClassForRabbit();
            ClassForDataBase db     = new ClassForDataBase();
            // Получить индекс последнего добавленного в локальную бд.
            int lastInd = db.GetLastIndexInDb();

            while (true)
            {
                lastInd++;
                string timeNow    = DateTime.Now.ToShortTimeString();
                string randomText = "randomText";
                string hash       = "hash";
                string message    = String.Join("_", lastInd.ToString(), timeNow, randomText, hash);
                db.AddStringAnsync(timeNow, randomText, hash);
                Console.WriteLine("Добавлено в базу - {0}", message);
                //Отправить в брокер, если включен.
                if (rabbit.DoSend(message))
                {
                    // Добавить в базу признак, что сообщение отправлено в брокер.
                    db.ChangeSendFlagAsync(lastInd, 1);
                }
                Thread.Sleep(2000);
            }
        }
Exemple #2
0
        // Поток, срабатывающий раз в 10 сек.
        // Проверяет наличие не отправленных сообщений из базы в брокер и отправляет их.
        public static void UpdateRabbit()
        {
            ClassForRabbit   rabbit = new ClassForRabbit();
            ClassForDataBase db     = new ClassForDataBase();
            List <Int32>     inds;
            List <String>    messages;

            while (true)
            {
                if (rabbit.GetConnection())
                {
                    Thread.Sleep(10000);
                    Int32 ind = 0;
                    db.GetUnSendingMEssage(out messages, out inds);
                    Console.WriteLine("Зашел во внешний цикл, колиество неотправленных = {0}", messages.Count().ToString());
                    foreach (String messaage in messages)
                    {
                        // если сообщение отправлено, то добавить измененние в локальной базе
                        if (rabbit.DoSend(messaage))
                        {
                            db.ChangeSendFlagAsync(inds[ind], 1);
                        }
                        ind++;
                    }
                }
            }
        }