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
}
}