using MegaRobo.Connections; using MegaRobo.Connections.Sockets.Tcp; using MegaRobo.Contract; using MegaRobo.ControlDevices.Abstractions; using MegaRobo.Logger; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace MegaRobo.C00225155.ControlDevices { public class HighTemperatureShakeService : ConnectorBase { public override async Task Initialize(ICoreService coreService, params object[] args) { this.CoreService = coreService; try { base.CoreService = coreService; if (args is [IPEndPoint remoteHost, ..]) { base.ConnectorAdapter = new MegaTcpClient { Logger = coreService.Logger, Name = base.Name }; if (base.ConnectorAdapter != null) { base.ConnectorAdapter.DataReceived += ConnectorOnDataReceived; } ConnectionState = await base.ConnectorAdapter.ConnectAsync(remoteHost); } } catch (Exception ex) { Logger.LogException(ex); return await Task.FromResult(ex.Message); } return string.Empty; } private void ConnectorOnDataReceived(object sender, TcpMessage tcpMsg) { if (tcpMsg is null) return; var msg = tcpMsg.ParseStirng(); if (string.IsNullOrEmpty(msg)) return; } public override Task ReconnectAsync() { return base.ReconnectAsync(); } /// /// 检测连接状态 /// /// public override async Task CheckConnected() { var state = ConnectionState.None; if (ConnectorAdapter is not null) { state = await ConnectorAdapter.CheckConnectedAsync(); } ConnectionState = state; return state; } /// /// 设置加热温度 /// /// /// /// 关闭温度 /// public async Task SetTemperature(int temperature, byte deviceId, bool offTemp) { var tcpMessage = await ConnectorAdapter.WriteAndGetReplyAsync(HighTemperatureUartHCM.SendSetHotTemp(temperature, deviceId, offTemp), TimeSpan.FromSeconds(3)); if (tcpMessage is null) return false; ParseResult result = HighTemperatureUartHCM.ParseReceivedFrame(tcpMessage.Data); return result.IsSuccess; } /// /// 获取当前温度 /// /// /// public async Task GetActualTemperature(byte deviceId) { int temperature = 0; var tcpMessage = await ConnectorAdapter.WriteAndGetReplyAsync(HighTemperatureUartHCM.SendReadTempRequest(deviceId), TimeSpan.FromSeconds(3)); if (tcpMessage is null) return 0; ParseResult result = HighTemperatureUartHCM.ParseReceivedFrame(tcpMessage.Data); if (result.IsSuccess) { temperature = (int)result.Data["实际温度(℃)"]; } return temperature; } } }