using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using Wit; using Wit.SDK; using Wit.SDK.Modular; using Wit.SDK.Modular.Sensor; using Wit.SDK.Modular.Sensor.Device; using Wit.SDK.Modular.Sensor.Modular; using Wit.SDK.Modular.Sensor.Modular.Connector.Entity; using Wit.SDK.Modular.Sensor.Modular.Connector.Interface; namespace Wit.SDK.Modular.Sensor.Modular.Connector.Interface { /// /// 核心通讯模块接口 /// public abstract class IConnector { /// /// 连接状态 /// protected ConnectStatus ConnectStatus { get; set; } = ConnectStatus.Closed; /// /// 接收数据队列 /// public ConcurrentQueue ReceiveQueue = new ConcurrentQueue(); /// 发送数据锁 /// public object OnSendDataLockObj = new object(); /// /// 接收数据队列 /// public Thread ReceiveThread; /// /// 收数据的人 /// private List receiveListenerList = new List(); /// /// 监听发送数据的人 /// private List sendDataInterfaceList = new List(); /// /// 构造 /// public IConnector() { ReceiveThread = new Thread(HandleReceiveThread) { IsBackground = true }; ReceiveThread.Start(); } /// /// 对象销毁时 /// ~IConnector() { if (ReceiveThread != null) { ReceiveThread.Abort(); } } /// /// 检查配置 /// public abstract void CheckConfig(); /// /// 获得连接配置 /// /// public abstract IConnectConfig GetConfig(); /// /// 是否已经打开连接 /// /// public bool IsOpen() { return ConnectStatus == ConnectStatus.Opened; } /// /// 打开连接 /// /// public abstract void Open(); /// /// 关闭连接 /// /// public abstract void Close(); /// /// 发送数据 /// /// public abstract void SendData(byte[] data); /// /// 移除接收数据的人 /// /// public void LogoutReceivedObj(DataReceivedInterface listener) { receiveListenerList.Remove(listener); } /// /// 添加接收数据的人 /// /// public void RegisterReceivedObj(DataReceivedInterface listener) { receiveListenerList.Add(listener); } /// /// 取消发送数据监听者 /// /// public void LogoutDataDisplayObj(SendDataInterface listener) { sendDataInterfaceList.Remove(listener); } /// /// 添加发送数据监听者 /// /// public void RegisterDataDisplayObj(SendDataInterface listener) { sendDataInterfaceList.Add(listener); } /// /// 接收数据 /// /// public void onReceive(byte[] data) { ReceiveQueue.Enqueue(data); } /// /// 处理接收数据线程 /// private void HandleReceiveThread() { while (true) { Thread.Sleep(1); while (ReceiveQueue.Count > 0) { byte[] data = null; ReceiveQueue.TryDequeue(out data); for (int i = 0; i < receiveListenerList.Count; i++) { DataReceivedInterface dataReceived = receiveListenerList[i]; dataReceived.OnDataReceived(data); } } } } /// /// 如果发送数据 /// /// public void OnSendData(byte[] data) { for (int i = 0; i < sendDataInterfaceList.Count; i++) { var item = sendDataInterfaceList[i]; // 调用线程池完成操作 ThreadPool.QueueUserWorkItem(new WaitCallback((p) => { lock (OnSendDataLockObj) { item.OnSendData(data); } }), null); } } } /// /// 连接状态 /// public enum ConnectStatus { /// /// 打开的 /// Opened = 0, /// /// 关闭的 /// Closed = 1 } }