private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { try { List <AsyncUserTokenInfo> tokens = listener.OnlineUserToken; DateTime limit = DateTime.Now - new TimeSpan(0, 5, 0); List <AsyncUserTokenInfo> overtime = tokens.Where(q => q.FreshTime < limit).ToList(); if (overtime.Count == 0) { return; } StringBuilder sb = new StringBuilder(); sb.Append(string.Format("检测到 {0} 个连接超时,准备进行主动断开", overtime.Count)); sb.Append("\r\n"); AppendLog(sb.ToString()); foreach (var item in overtime) { listener.CloseClientSocket(item.UID); } } catch (Exception ex) { LogHelper.WriteLog("主动断开连接时出错", ex.Message, ex.StackTrace); } }
private void MsgHandler_OnIPChanged(string UID) { try { listener.CloseClientSocket(UID); } catch (Exception) { LogHelper.WriteLog("关闭连接时出错"); } }
private void UpdateCache(string client, string uid) { DeviceRow device = _devices.Where(q => q.ClientCode.Equals(client)).FirstOrDefault(); //_online.TryGetValue(client, out _uid); if (device != null && !string.IsNullOrEmpty(device.UID) && device.UID.Equals(uid)) { return; } if (device == null) { //_online.TryAdd(client, uid); //新增设备列表记录 AsyncUserTokenInfo info = _listener.OnlineUserToken.Where(q => q.UID.Equals(uid)).FirstOrDefault(); if (info != null) { AddDevice(new DeviceRow() { ClientCode = client, UID = uid, ClientIP = info.Remote.Address.ToString(), InTime = info.ConnectTime.ToString(), ModifyTime = info.FreshTime.ToString() }); } //数据库更新上线时间 ConnectionHelper.OnLine(client); } else { string _uid = device.UID; //_online.TryUpdate(client, uid, _uid); device.UID = uid; //如果IP地址变化,则关闭之前的连接 _listener.CloseClientSocket(_uid); } }