using IStation.Model;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WebSocket4Net;
namespace IStation.DataDockingApi
{
///
///
///
public class HandleHelper : IDataDockingApi.IHandleHelper
{
///
/// 接收
///
public void HandleData(List mappers, Action> receive)
{
if (mappers == null || mappers.Count < 1)
return;
var appParas = AppParasHelper.Get();
if (appParas == null)
{
LogHelper.Error("上海城投原水 Api 数据对接中,缺少对接配置文件");
return;
}
var url = appParas.url + Guid.NewGuid().ToString("N");
{
LogHelper.Info($"上海城投原水 Api 数据对接中,WebSocket访问url:{url}");
LogHelper.Info($"上海城投原水 Api 数据对接中,WebSocket指令:{appParas.key}");
}
var webSocket4Net = new WebSocket(url);
webSocket4Net.Opened += (sender, e) =>
{
webSocket4Net.Send(appParas.key);
LogHelper.Info($"上海城投原水 Api 数据对接中,已发送指令:{appParas.key}");
};
webSocket4Net.MessageReceived += (sender, e) =>
{
LogHelper.Info($"上海城投原水 Api 数据对接中,接收消息:{e.Message}");
if (e.Message == "连接成功")
{
LogHelper.Info("上海城投原水 Api 数据对接中,连接成功 ");
}
else if (e.Message.Contains("库中无此表"))
{
webSocket4Net.Close();
LogHelper.Info($"上海城投原水 Api 数据对接中,提示:{e.Message},连接关闭");
}
else
{
var dict = JsonHelper.Json2Object>(e.Message);
if (dict == null || dict.Count < 1)
{
LogHelper.Info("上海城投原水 Api 数据对接中,接收到的信息反序列化失败");
}
else
{
var recordList = dict.Select(x => x.Value).ToList();
var receiveList = new List();
foreach (var mapper in mappers)
{
var src = recordList.Find(x=>x.key==mapper.SignId);
if (src != null)
{
var recordContent = JsonHelper.Json2Object(src.vals);
if (recordContent != null)
{
if (DateTime.TryParse(recordContent.time, out DateTime time_result))
{
var receiveRecord = new Model.MonitorDataDockingReceiveRecord()
{
SysId = mapper.SysId,
RecordType = Model.eMonitorType.General,
SrcTime = time_result,
SrcValue = recordContent.value
};
receiveList.Add(receiveRecord);
}
}
}
}
receive(receiveList);
#region 生成调试记录
if (appParas.debug)
{
DebugHelper.Debug(recordList);
}
#endregion
}
webSocket4Net.Close();
}
};
webSocket4Net.Open();
}
}
}