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" }); }
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); } }
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); }