Exemple #1
0
        public void GetUserInfo()
        {
            dbInfo = new UserInfoEx
            {
                Id = 1,
                AvatarBigFileName   = "AvatarBig.png",
                AvatarSmallFileName = "AvatarSmall.png",
                AboutFileName       = "About.rtf",
                Contacts            = "*****@*****.**",
                AvatarBig           = SystemIcons.Information.ToBitmap(),
                AvatarSmall         = SystemIcons.Warning.ToBitmap(),
                About = "About"
            };

            cache = new UserInfoExCache(source.Object);
            var path = ExecutablePath.ExecPath + "\\files";

            Assert.IsTrue(Directory.Exists(path), "cache directory " + path + " not found");

            // 1st test
            // db with 3 files, cache is empty
            calls.Clear();
            cache.GetUserInfo(1);
            Assert.AreEqual(4, calls.Count, "1: request count mismatch");
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "1: GetUserBriefInfo not found");
            Assert.IsTrue(calls.Contains("ReadFile " + dbInfo.AvatarBigFileName), "1: ReadFile AvatarBigFileName not found");
            Assert.IsTrue(calls.Contains("ReadFile " + dbInfo.AvatarSmallFileName), "1: ReadFile AvatarSmallFileName not found");
            Assert.IsTrue(calls.Contains("ReadFile " + dbInfo.AboutFileName), "1: ReadFile AboutFileName not found");

            // 2nd test
            // db with 3 files, cache is filled
            calls.Clear();
            cache.GetUserInfo(1);
            Assert.AreEqual(1, calls.Count, "2: request count mismatch");
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "2: GetUserBriefInfo not found");

            // 3rd test
            // 1 file is changed in db, cache is filled
            dbInfo.AvatarBig = SystemIcons.Error.ToBitmap();
            calls.Clear();
            cache.GetUserInfo(1);
            Assert.AreEqual(2, calls.Count, "3: request count mismatch");
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "3: GetUserBriefInfo not found");
            Assert.IsTrue(calls.Contains("ReadFile " + dbInfo.AvatarBigFileName), "3: ReadFile AvatarBigFileName not found");

            // 4th test
            // 1 file deleted from db, then added, cache is filled
            dbInfo.AvatarBigFileName = null;
            dbInfo.AvatarBig         = null;
            calls.Clear();
            cache.GetUserInfo(1);
            Assert.AreEqual(1, calls.Count, "4.1: request count mismatch");
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "4.1: GetUserBriefInfo not found");
            calls.Clear();
            dbInfo.AvatarBigFileName = "AvatarBig.png";
            dbInfo.AvatarBig         = SystemIcons.Error.ToBitmap();
            cache.GetUserInfo(1);
            Assert.AreEqual(1, calls.Count, "4.2: request count mismatch");
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "4.2: GetUserBriefInfo not found");
        }
Exemple #2
0
        public void GetVoidUserInfo()
        {
            var sourceVoid = new Mock <IAccountStatistics>();

            sourceVoid.Setup(s => s.GetUserInfo(It.IsAny <int>())).Returns <int>(GetUserInfo);
            sourceVoid.Setup(s => s.GetUsersBriefInfo(It.IsAny <List <int> >())).Returns <List <int> >(ids =>
            {
                calls.Add(string.Format("GetUserBriefInfo {0}", 1));
                return(new List <UserInfoEx> {
                    null
                });
            });
            sourceVoid.Setup(s => s.SetUserInfo(It.IsAny <UserInfoEx>())).Returns <UserInfoEx>(SetUserInfo);
            sourceVoid.Setup(s => s.ReadFiles(It.IsAny <List <string> >())).Returns <List <string> >(names => null);
            sourceVoid.Setup(s => s.WriteFile(It.IsAny <string>(), It.IsAny <byte[]>())).Returns <string, byte[]>(WriteFile);

            cache = new UserInfoExCache(sourceVoid.Object);

            //TODO Эти тесты почти ничего не тестируют
            calls.Clear();
            var res1 = cache.GetUsersInfo(new List <int> {
                1
            });

            Assert.IsNull(res1);
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "GetUserBriefInfo not found");

            calls.Clear();
            var res2 = cache.GetUsersInfo(null);

            Assert.IsNull(res2);
            Assert.AreEqual(0, calls.Count);
        }
Exemple #3
0
        public void GetUserInfoException()
        {
            cache = new UserInfoExCache(null);

            calls.Clear();
            cache.GetUserInfo(1);
            Assert.AreEqual(0, calls.Count, "1: request count mismatch");
        }
Exemple #4
0
        public void SetVoidUserInfo()
        {
            var sourceVoid1 = new Mock <IAccountStatistics>();

            sourceVoid1.Setup(s => s.GetUserInfo(It.IsAny <int>())).Returns <int>(GetUserInfo);
            sourceVoid1.Setup(s => s.GetUsersBriefInfo(It.IsAny <List <int> >())).Returns <List <int> >(ids =>
            {
                calls.Add(string.Format("GetUserBriefInfo {0}", 1));
                return(null);
            });
            sourceVoid1.Setup(s => s.SetUserInfo(It.IsAny <UserInfoEx>())).Returns <UserInfoEx>(SetUserInfo);
            sourceVoid1.Setup(s => s.ReadFiles(It.IsAny <List <string> >())).Returns <List <string> >(names => null);
            sourceVoid1.Setup(s => s.WriteFile(It.IsAny <string>(), It.IsAny <byte[]>())).Returns <string, byte[]>(WriteFile);

            cache = new UserInfoExCache(sourceVoid1.Object);

            calls.Clear();
            cache.SetUserInfo(new UserInfoEx
            {
                Id          = 1,
                Contacts    = "*****@*****.**",
                AvatarBig   = SystemIcons.Information.ToBitmap(),
                AvatarSmall = SystemIcons.Warning.ToBitmap(),
                About       = "About"
            });

            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "2: GetUserBriefInfo not found");


            dbInfo = new UserInfoEx
            {
                Id = 1,
                AvatarBigFileName = "AvatarBig.png",
                AboutFileName     = "About.rtf",
                Contacts          = "*****@*****.**",
                AvatarBig         = SystemIcons.Information.ToBitmap(),
                AvatarSmall       = SystemIcons.Warning.ToBitmap(),
                About             = "About"
            };
            sourceVoid1.Setup(s => s.GetUsersBriefInfo(It.IsAny <List <int> >())).Returns <List <int> >(GetUsersBriefInfo);
            cache = new UserInfoExCache(sourceVoid1.Object);
            cache.SetUserInfo(new UserInfoEx
            {
                Id          = 1,
                Contacts    = "*****@*****.**",
                AvatarBig   = SystemIcons.Information.ToBitmap(),
                AvatarSmall = SystemIcons.Warning.ToBitmap(),
                About       = "About"
            });
        }
Exemple #5
0
        public void SetUserInfo()
        {
            cache  = new UserInfoExCache(source.Object);
            dbInfo = new UserInfoEx {
                Id = 1
            };
            var info = new UserInfoEx
            {
                Id          = 1,
                Contacts    = "*****@*****.**",
                AvatarBig   = SystemIcons.Information.ToBitmap(),
                AvatarSmall = SystemIcons.Warning.ToBitmap(),
                About       = "About"
            };

            // 1st test
            // db is empty, cache is empty
            calls.Clear();
            cache.SetUserInfo(info); // info with 3 files
            Assert.AreEqual(2, calls.Count, "1: request count mismatch");
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "1: GetUserBriefInfo not found");
            Assert.IsTrue(calls.Contains("SetUserInfo 1"), "1: SetUserInfo not found");

            // 2nd test
            // db with 3 files, cache is filled
            info.AvatarBig = SystemIcons.Error.ToBitmap();
            calls.Clear();
            cache.SetUserInfo(info); // info with 3 files, 1 file changed
            Assert.AreEqual(3, calls.Count, "2: request count mismatch");
            Assert.IsTrue(calls.Contains("GetUserBriefInfo 1"), "2: GetUserBriefInfo not found");
            Assert.IsTrue(calls.Contains("WriteFile " + dbInfo.AvatarBigFileName), "2: GetUserBriefInfo not found");
            Assert.IsTrue(calls.Contains("SetUserInfo 1"), "2: SetUserInfo not found");

            // 3rd test
            // db with 3 files, cache is filled
            info.AvatarBig   = null;
            info.AvatarSmall = null;
            info.About       = null;
            calls.Clear();
            cache.SetUserInfo(info); // info with no files
            Assert.AreEqual(1, calls.Count, "3: request count mismatch");
            Assert.IsTrue(calls.Contains("SetUserInfo 1"), "3: SetUserInfo not found");
        }
        private void EditExisting()
        {
            var login = AccountStatus.Instance.Login;

            if (string.IsNullOrEmpty(login))
            {
                return;
            }
            if (string.IsNullOrEmpty(oldPassword))
            {
                return;
            }
            if (editedUser == null)
            {
                return;
            }
            if (editedAccount == null)
            {
                return;
            }

            // собрать данные
            var user = new PlatformUser
            {
                Email       = tbEmail.Text,
                Login       = tbLogin.Text,
                Name        = tbName.Text,
                Surname     = tbSurname.Text,
                Patronym    = tbPatronym.Text,
                Phone1      = tbPhone1.Text,
                Phone2      = tbPhone2.Text,
                Description = tbDescription.Text,
                Password    = tbPassword.Text
            };
            var maxLeverage = tbMaxLeverage.Text.ToFloatUniform();

            bool loginIsBusy;
            var  resp = MainForm.serverProxyTrade.proxy.ModifyUserAndAccount(login, oldPassword,
                                                                             user, editedAccount.ID, maxLeverage, out loginIsBusy);

            if (loginIsBusy)
            {
                MessageBox.Show(string.Format(Localizer.GetString("MessageLoginInUse"), user.Login));
                return;
            }

            if (resp == AuthenticationResponse.AccountInactive ||
                resp == AuthenticationResponse.InvalidAccount ||
                resp == AuthenticationResponse.WrongPassword ||
                resp == AuthenticationResponse.ServerError)
            {
                var msg = Localizer.GetString("MessageUnableToUpdate") + " - " +
                          EnumFriendlyName <AuthenticationResponse> .GetString(resp);

                MessageBox.Show(msg, Localizer.GetString("TitleError"));
            }

            // обновить дополнительные данные о пользователе
            try
            {
                var userInfoExSource =
                    new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy, TerminalEnvironment.FileCacheFolder);
                var info = new UserInfoEx
                {
                    Id          = editedUser.ID,
                    AvatarBig   = bigAvatarPanel.BackgroundImage as Bitmap,
                    AvatarSmall = smallAvatarPanel.BackgroundImage as Bitmap,
                    About       = aboutRichTextBox.Text,
                    Contacts    = ContactListUtils.PackContacts(contactsListView)
                };
                userInfoExSource.SetUserInfo(info);
            }
            catch (Exception ex)
            {
                MessageBox.Show(Localizer.GetString("TitleServerError"),
                                Localizer.GetString("TitleError"));
                Logger.Info("Ошбика при записи дополнительной информации о пользователе", ex);
                return;
            }
            MessageBox.Show(Localizer.GetString("MessageDataSuccessfulyUpdated"),
                            Localizer.GetString("TitleConfirmation"),
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Asterisk);
        }
        private void LoadData()
        {
            // загрузить данные о пользователе и счете
            editedAccount = AccountStatus.Instance.AccountData;
            if (editedAccount == null)
            {
                return;
            }
            // валюта...
            var indexCurx = cbCurrency.Items.IndexOf(editedAccount.Currency);

            if (indexCurx < 0)
            {
                indexCurx = cbCurrency.Items.Add(editedAccount.Currency);
            }
            cbCurrency.SelectedIndex = indexCurx;
            // баланс...
            cbDepoSize.Text = editedAccount.Equity.ToStringUniformMoneyFormat(false);
            // макс плечо...
            tbMaxLeverage.Text = editedAccount.MaxLeverage.ToStringUniform();

            // получить данные о пользователе...
            var login = AccountStatus.Instance.Login;

            if (string.IsNullOrEmpty(login))
            {
                return;
            }

            var password = UserSettings.Instance.GetPasswordForLogin(login);

            oldPassword = password;
            var passwordPrompt = Localizer.GetString("MessageEnterOldPassword");

            while (true)
            {
                if (string.IsNullOrEmpty(password))
                {
                    DialogResult rst;
                    password = Dialogs.ShowInputDialog(passwordPrompt, "", true, out rst);
                    if (rst == DialogResult.Cancel)
                    {
                        return;
                    }
                    oldPassword = password;
                }

                var resp = MainForm.serverProxyTrade.proxy.GetUserDetail(login, password, out editedUser);
                if (resp == AuthenticationResponse.AccountInactive ||
                    resp == AuthenticationResponse.InvalidAccount ||
                    resp == AuthenticationResponse.ServerError)
                {
                    MessageBox.Show(EnumFriendlyName <AuthenticationResponse> .GetString(resp));
                    return;
                }

                if (resp == AuthenticationResponse.WrongPassword)
                {
                    password       = string.Empty;
                    passwordPrompt = Localizer.GetString("MessageWrongPwrdEnterAgain");
                    continue;
                }
                if (editedUser != null)
                {
                    break;
                }
            }

            // показать данные пользователя
            tbEmail.Text       = editedUser.Email;
            tbLogin.Text       = editedUser.Login;
            tbPatronym.Text    = editedUser.Patronym;
            tbName.Text        = editedUser.Name;
            tbSurname.Text     = editedUser.Surname;
            tbPhone1.Text      = editedUser.Phone1;
            tbPhone2.Text      = editedUser.Phone2;
            tbDescription.Text = editedUser.Description;
            tbPassword.Text    = editedUser.Password;
            ShowSignallerOptions(editedUser);

            // получить дополнительные данные о пользователе
            try
            {
                var userInfoExSource =
                    new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy, TerminalEnvironment.FileCacheFolder);
                var info = userInfoExSource.GetUserInfo(editedUser.ID);
                if (info != null)
                {
                    bigAvatarPanel.BackgroundImage   = info.AvatarBig;
                    smallAvatarPanel.BackgroundImage = info.AvatarSmall;
                    aboutRichTextBox.Text            = info.About;
                    ContactListUtils.UnpackContacts(info.Contacts, contactsListView);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(Localizer.GetString("TitleServerError"),
                                Localizer.GetString("TitleError"), MessageBoxButtons.OK, MessageBoxIcon.Error);
                Logger.Info("Ошбика при чтении дополнительной информации о пользователе", ex);
            }
        }
        public void DataBind(List <PerformerStatEx> performerStats, ChatControlBackEnd chat)
        {
            var images = imgListChartMini.Images.Cast <Image>().ToList();

            imgListChartMini.Images.Clear();
            foreach (var img in images)
            {
                img.Dispose();
            }
            var data = new List <PerformerStatEx>();

            // UserScore вычисляется на сервере
            // RecalcUserScore(performerStats);

            var userInfoExSource = new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy);
            var usersInfoEx      = userInfoExSource.GetUsersInfo(performerStats.Select(p => p.UserId).Distinct().ToList());

            var rowColors    = new[] { Color.Red, Color.ForestGreen, Color.Black };
            var stringFormat = new StringFormat
            {
                Alignment     = StringAlignment.Near,
                LineAlignment = StringAlignment.Center
            };

            using (var font = new Font(Font.FontFamily, 7))
                foreach (var performerStat in performerStats)
                {
                    // создать картинку с графиком
                    var bmp = new Bitmap(imgListChartMini.ImageSize.Width, imgListChartMini.ImageSize.Height);
                    if (performerStat.Chart != null)
                    {
                        using (var gr = Graphics.FromImage(bmp))
                        {
                            var leftValue = performerStat.AvgYearProfit;
                            var leftText  = string.Format("{0:f2}%", leftValue);

                            var leftTextWidth = gr.MeasureString(leftText, font).ToSize().Width;
                            var rightValue    = performerStat.ProfitLastMonthsAbs;
                            var rightText     = rightValue.ToStringUniformMoneyFormat(false);
                            var textWidth     = leftTextWidth + gr.MeasureString(rightText, font).ToSize().Width;
                            if (!ShowLabelsInMiniChart)
                            {
                                textWidth = 0;
                            }
                            PointF[] points;
                            if (ChartBrush != null)
                            {
                                points = MiniChartPacker.MakePolygon(performerStat.Chart,
                                                                     imgListChartMini.ImageSize.Width - textWidth,
                                                                     imgListChartMini.ImageSize.Height, 1, 1);
                            }
                            else
                            {
                                points = MiniChartPacker.MakePolyline(performerStat.Chart,
                                                                      imgListChartMini.ImageSize.Width - textWidth,
                                                                      imgListChartMini.ImageSize.Height, 1, 1);
                            }
                            gr.SmoothingMode     = SmoothingMode.AntiAlias;
                            gr.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                            if (ShowLabelsInMiniChart)
                            {
                                for (var i = 0; i < points.Length; i++)
                                {
                                    points[i] = new PointF(points[i].X + leftTextWidth, points[i].Y);
                                }
                                gr.DrawString(leftText, font,
                                              new SolidBrush(leftValue >= 0 ? rowColors[1] : rowColors[0]), 0,
                                              imgListChartMini.ImageSize.Height / 2, stringFormat);
                                gr.DrawString(rightText, font,
                                              new SolidBrush(rightValue >= 0 ? rowColors[1] : rowColors[0]),
                                              imgListChartMini.ImageSize.Width - textWidth + leftTextWidth,
                                              imgListChartMini.ImageSize.Height / 2, stringFormat);
                            }

                            if (ChartBrush != null)
                            {
                                gr.FillPolygon(ChartBrush, points);
                            }
                            else
                            {
                                gr.DrawLines(ChartPen ?? new Pen(leftValue >= 0 ? rowColors[1] : rowColors[0], 2), points);
                            }
                        }
                    }
                    var item = new PerformerStatEx(performerStat)
                    {
                        ChartIndex = imgListChartMini.Images.Count
                    };
                    imgListChartMini.Images.Add(bmp);
                    imgListChartMini.Images.SetKeyName(item.ChartIndex, item.ChartIndex.ToString());

                    // создать фотку
                    UserInfoEx userInfoEx = null;
                    if (usersInfoEx != null)
                    {
                        userInfoEx = usersInfoEx.Find(ui => ui != null && ui.Id == performerStat.UserId);
                    }
                    if (userInfoEx != null && userInfoEx.AvatarSmall != null)
                    {
                        item.AvatarSmallIndex = imgListAvatar.Images.Count;
                        imgListAvatar.Images.Add(userInfoEx.AvatarSmall);
                        imgListAvatar.Images.SetKeyName(item.AvatarSmallIndex, item.AvatarSmallIndex.ToString());
                    }
                    else
                    {
                        item.AvatarSmallIndex = -1;
                    }

                    data.Add(item);
                }

            grid.DataBind(data);
            grid.Invalidate();

            if (this.chat != null)
            {
                this.chat.RoomsReceived -= RoomsReceived;
            }
            this.chat = chat;

            if (chat == null)
            {
                return;
            }

            chat.RoomsReceived += RoomsReceived;
            chat.GetRooms();
        }
Exemple #9
0
        private void DoSend()
        {
            Chat            = new ChatClientStable(chatCallback, TerminalBindings.Chat);
            Chat.Connected += () => { if (Connected != null)
                                      {
                                          Connected();
                                      }
            };
            Chat.Disconnected += () => { if (Disconnected != null)
                                         {
                                             Disconnected();
                                         }
            };
            UserInfoSource = new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy);
            while (!isStopping)
            {
                bool timeoutFlag;
                var  allRequests = requests.ExtractAll(lockTimeout, out timeoutFlag);
                if (timeoutFlag)
                {
                    continue;
                }
                // флаг повтора запроса;
                // перезапросы возникают из-за ошибок сети;
                // в этом случае ожидание между запросами увеличено, чтобы не загружать проц без пользы
                var repeatRequest = false;
                foreach (var request in allRequests)
                {
                    try
                    {
                        switch (request.Code)
                        {
                        case RequestCode.GetAllUsers:
                            request.Id = Chat.GetAllUsers((string)request.Arguments[0]);
                            break;

                        case RequestCode.Enter:
                            request.Id = Chat.Enter((User)request.Arguments[0]);
                            break;

                        case RequestCode.Exit:
                            request.Id = Chat.Exit();
                            break;

                        case RequestCode.GetRooms:
                            request.Id = Chat.GetRooms();
                            break;

                        case RequestCode.EnterRoom:
                            request.Id = Chat.EnterRoom((string)request.Arguments[0], (string)request.Arguments[1]);
                            break;

                        case RequestCode.MoveToRoom:
                            request.Id = Chat.MoveToRoom((int)request.Arguments[0], (string)request.Arguments[1],
                                                         (string)request.Arguments[2]);
                            break;

                        case RequestCode.LeaveRoom:
                            request.Id = Chat.LeaveRoom((string)request.Arguments[0]);
                            break;

                        case RequestCode.CreateRoom:
                            request.Id = Chat.CreateRoom((Room)request.Arguments[0]);
                            break;

                        case RequestCode.DestroyRoom:
                            request.Id = Chat.DestroyRoom((string)request.Arguments[0]);
                            break;

                        case RequestCode.SendPrivateMessage:
                            request.Id = Chat.SendPrivateMessage((int)request.Arguments[0],
                                                                 (string)request.Arguments[1]);
                            break;

                        case RequestCode.SendMessage:
                            request.Id = Chat.SendMessage((string)request.Arguments[0],
                                                          (string)request.Arguments[1]);
                            break;

                        case RequestCode.GetPendingMessages:
                            request.Id = Chat.GetPendingMessages((DateTime)request.Arguments[0],
                                                                 (string)request.Arguments[1]);
                            break;

                        case RequestCode.GetPendingPrivateMessages:
                            request.Id = Chat.GetPendingPrivateMessages((DateTime)request.Arguments[0],
                                                                        (int)request.Arguments[1]);
                            break;

                        case RequestCode.Ping:
                            Chat.Ping();
                            break;

                        case RequestCode.GetUserInfoEx:
                            var userinfo = UserInfoSource.GetUserInfo((int)request.Arguments[0]);
                            if (UserInfoExReceived != null)
                            {
                                UserInfoExReceived(userinfo ?? new UserInfoEx {
                                    Id = (int)request.Arguments[0]
                                });
                            }
                            break;

                        case RequestCode.SetUserInfoEx:
                            UserInfoSource.SetUserInfo((UserInfoEx)request.Arguments[0]);
                            break;
                        }
                        if (request.Id == 0)
                        {
                            QueueRequest(request); // if server refused request - try again
                            repeatRequest = true;
                        }
                        else if (request.Id != -1) // skip Ping, GetUserInfoEx, SetUserInfoEx
                        {
                            request.Status = ChatResultCode.InProgress;
                            pendingRequests.UpdateValues(request.Id, request);

                            /*if (pendingRequestsLock.TryEnterWriteLock(lockTimeout))
                             * {
                             *  pendingRequests.Add(request.Id, request);
                             *  pendingRequestsLock.ExitWriteLock();
                             * }
                             * else
                             *  Console.WriteLine("ChatSender.DoSend: pendingRequestsWriteLock timeout");*/
                            var requestCopy = new ChatRequest(request);
                            if (RequestQueuedOnServer != null)
                            {
                                RequestQueuedOnServer(requestCopy);
                            }
                            if (forwardAnswers.ContainsKey(request.Id))
                            {
                                pendingRequests.Remove(request.Id);
                                requestCopy.Status = forwardAnswers.ReceiveValue(request.Id);
                                if (RequestProcessed != null)
                                {
                                    RequestProcessed(requestCopy);
                                }
                                forwardAnswers.Remove(request.Id);
                            }
                        }
                    }
                    catch (Exception ex) // probably communication error
                    {
                        Logger.ErrorFormat("DoSend exception: {0}", ex);
                        if (request.Code != RequestCode.Ping)
                        {
                            QueueRequest(request);
                        }
                        repeatRequest = true;
                    }
                }

                //проверка соединения - ping
                if (allRequests.Count == 0)
                {
                    if (DateTime.Now.Subtract(lastConnectionCheck.GetLastHit()).TotalSeconds > 15)
                    {
                        var request = new ChatRequest(RequestCode.Ping, new List <object>(), -1);
                        QueueRequest(request);
                        lastConnectionCheck.Touch();
                    }
                }

                Thread.Sleep(repeatRequest ? 1000 : 100);
            }
        }