private AllUsers() { bool timeoutFlag; users.ExtractAll(LockTimeout, out timeoutFlag); if (GetAllPlatformUsers == null) { return; } try { var allUsers = GetAllPlatformUsers(); if (allUsers == null) { return; } users.AddRange(allUsers.Select(u => new User(u)), LockTimeout); lastRequestTime.Touch(); } catch (Exception ex) { //Console.WriteLine("Ошибка получения списка пользователей\n" + ex); Logger.Error("Ошибка получения списка пользователей", ex); } }
private void RoomsReceivedInternal(List <Room> rooms) { activeRooms.ExtractAll(LockTimeout); activeRooms.AddRange(rooms, LockTimeout); if (RoomsReceived != null) { RoomsReceived(rooms); } }
public void AppendLogMessage(string msg) { logMessages.Add(DateTime.Now.ToString("HH:mm:ss") + " " + msg, 1000); // отрезать линюю историю if (logMessages.Count <= MaxMessagesInLog) { return; } bool timeout; var subMsgList = logMessages.ExtractAll(1000, out timeout); var countTarget = MaxMessagesInLog - ClearLogBy; subMsgList = subMsgList.Skip(Math.Max(0, subMsgList.Count() - countTarget)).Take(countTarget).ToList(); logMessages.AddRange(subMsgList, 1000); }
private void button1_Click(object sender, EventArgs e) { ThreadSafeList <string> list = new ThreadSafeList <string>(); Random rnd = new Random(DateTime.Now.Millisecond); for (int i = 0; i < 10; i++) { list.Add(rnd.Next(1, 20).ToString()); } string[] aa = { "A1", "B2", "C3", "D4" }; list.AddRange(aa); MessageBox.Show("OK"); list = new ThreadSafeList <string>(aa); list.RemoveAll(s => { int zz; return(!int.TryParse(s, out zz)); }); ThreadSafeCollection <string> cl = new ThreadSafeCollection <string>(); }
private void AllUsersReceivedInternal(List <User> users, string room) { if (isStopping) { return; } if (string.IsNullOrEmpty(room)) { onlineUsers.ExtractAll(LockTimeout); onlineUsers.AddRange(users, LockTimeout); } if (AllUsersReceived != null) { AllUsersReceived(users, room); } }
public void ThreadSafeListCopyTest() { var list1 = new ThreadSafeList<QuoteData>(); var list2 = new ThreadSafeList<int>(); list1.AddRange(new[] {new QuoteData(1, 2, DateTime.Now), null}, 1000); list2.AddRange(new[] {1, 2, 3}, 1000); var found1 = list1.Find(x => true, x => new QuoteData(x), 1000); Assert.IsTrue(found1.ask == 2 && found1.bid == 1); var found2 = list1.Find(x => x == null, x => new QuoteData(x), 1000); Assert.IsNull(found2); found2 = list1.Find(x => x.ask == 100, x => new QuoteData(x), 1000); Assert.IsNull(found2); var found3 = list2.Find(x => x == 2, x => x, 1000); Assert.IsTrue(found3 == 2); found3 = list2.Find(x => x == 100, x => x, 1000); Assert.AreEqual(found3, default(int)); }
public void ThreadSafeListCopyTest() { var list1 = new ThreadSafeList <QuoteData>(); var list2 = new ThreadSafeList <int>(); list1.AddRange(new[] { new QuoteData(1, 2, DateTime.Now), null }, 1000); list2.AddRange(new[] { 1, 2, 3 }, 1000); var found1 = list1.Find(x => true, x => new QuoteData(x), 1000); Assert.IsTrue(found1.ask == 2 && found1.bid == 1); var found2 = list1.Find(x => x == null, x => new QuoteData(x), 1000); Assert.IsNull(found2); found2 = list1.Find(x => x.ask == 100, x => new QuoteData(x), 1000); Assert.IsNull(found2); var found3 = list2.Find(x => x == 2, x => x, 1000); Assert.IsTrue(found3 == 2); found3 = list2.Find(x => x == 100, x => x, 1000); Assert.AreEqual(found3, default(int)); }
public void ProcessTradeSignals(List <TradeSignalAction> actions) { actionsPending.AddRange(actions, 2000); }
private void CheckServerAlive() { while (!isStopping) { Thread.Sleep(100); var checkTime = liveServerCheckTime.GetLastHitIfHitted(); if (!checkTime.HasValue) { // по непонятным причинам, клиент иногда все-таки переходит в это состояние // заставляем его переподключиться по таймеру if (currentUserId != 0 && !IsOnline) { liveServerCheckTime.SetTime(DateTime.Now + aliveTimeSpan); } continue; } if (checkTime.Value > DateTime.Now) { continue; } // переподключение: // запоминаем все невыполненные запросы, за исключением запросов на вход unAnsweredRequests.AddRange( chatSender.GetPendingRequests() .Select(r => r.Value) .Where(r => r.Code != RequestCode.Enter && r.Code != RequestCode.Exit), LockTimeout); unAnsweredRequests.AddRange( chatSender.GetRequests().Where(r => r.Code != RequestCode.Enter && r.Code != RequestCode.Exit), LockTimeout); if (unAnsweredRequests.Count == 0) { continue; } liveServerCheckTime.ResetHit(); // 4 debug Console.WriteLine("timeout: renew connection"); bool timeoutFlag; var reqs = unAnsweredRequests.GetAll(LockTimeout, out timeoutFlag); foreach (var req in reqs) { Console.WriteLine(req.ToString()); } // end of 4 debug if (IsOnline) { var userId = currentUserId; Exit(); currentUserId = userId; // ожидаем перед разрывом соединения Thread.Sleep(200); // TODO: improve } // очищаем очереди запросов chatSender.ClearRequests(); // переподключаемся, перезаход выполняется в Connected() if (chatSender.Chat != null) { chatSender.Chat.RenewConnection(); } } }