Ejemplo n.º 1
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"

            });
        }
Ejemplo n.º 2
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);
            }
        }
Ejemplo n.º 3
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");
        }
Ejemplo n.º 4
0
        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);
        }