You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.9 KiB
58 lines
1.9 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web;
|
|
|
|
namespace OpcServerHost
|
|
{
|
|
public class ChatEventHelper
|
|
{
|
|
//定义一个静态对象用于线程部份代码块的锁定,用于lock操作
|
|
private static Object syncObj = new Object();
|
|
|
|
//定义用于把处理程序赋予给事件的委托。
|
|
public delegate void ChatEventHandler(object sender, ChatEventArgs e);
|
|
|
|
//创建一个静态Dictionary(表示键和值)集合(字典),用于记录在线成员,Dictionary<(Of <(TKey, TValue>)>) 泛型类
|
|
public static Dictionary<string, ChatEventHandler> chatters = new Dictionary<string, ChatEventHandler>();
|
|
|
|
//创建一个静态Dictionary存储设备的最新更新时间
|
|
public static Dictionary<string, DateTime> chatterTimes = new Dictionary<string, DateTime>();
|
|
|
|
|
|
//定义定时器,不断地检索客户端是否连接
|
|
public static System.Timers.Timer dutyTimer;
|
|
|
|
/// <summary>
|
|
/// 开启定时器
|
|
/// </summary>
|
|
public static void StartListenClients()
|
|
{
|
|
dutyTimer = new System.Timers.Timer();
|
|
dutyTimer.Interval = 500;
|
|
dutyTimer.Elapsed += new System.Timers.ElapsedEventHandler(dutyTimer_Elapsed);
|
|
dutyTimer.Start();
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="sender"></param>
|
|
/// <param name="e"></param>
|
|
static void dutyTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
|
{
|
|
lock (syncObj)
|
|
{
|
|
foreach (string key in new List<string>(chatterTimes.Keys))
|
|
{
|
|
if (chatterTimes[key].AddSeconds(5) < DateTime.Now)
|
|
{
|
|
chatters.Remove(key);
|
|
chatterTimes.Remove(key);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|