| | |
| | | Log.Debug(flowId, JsonHelper.Object2Json(input)); |
| | | |
| | | var scadaInput = GetScadaDispatchInput(DateTime.Now.AddSeconds(300), DateTime.Now); |
| | | var scadaOutput = await GetRealScada1(flowId, scadaInput); |
| | | var scadaOutput = await GetRealScada(flowId, scadaInput); |
| | | if (scadaOutput == null || scadaOutput.Scadas == null) |
| | | { |
| | | Log.Info(flowId, "Scada:数据获取失败,调度终止!"); |
| | | throw YOops.Oh(eResultCode.Error, ErrorCodes.L001, "Scada:数据获取失败,调度终止!"); |
| | | } |
| | | |
| | | |
| | | return new DispatchSolutionOutput(); |
| | | return TempOutHelper.GetDispatchSolutionOutput(input.FlowId); |
| | | } |
| | | |
| | | private async Task<ScadaDispatchOutput> GetRealScada(string flowId, ScadaDispatchInput input) |
| | | { |
| | | if (input == null) |
| | | { |
| | | Log.Info(flowId, "ScadaDispatchInput is null"); |
| | | return default; |
| | | } |
| | | |
| | | var ws = await CreateAsync("ws://localhost:5102/api/WebSocket/GetNotReadCount"); |
| | | if (ws == null || ws.State != WebSocketState.Open) |
| | | { |
| | | Log.Info(flowId, "webSocket:连接失败!"); |
| | | return default; |
| | | } |
| | | Log.Info(flowId, "webSocket:连接成功!"); |
| | | |
| | | ScadaDispatchOutput output = null; |
| | | var inputJson = JsonHelper.Object2FormatJson(input); |
| | | Log.Debug(flowId, inputJson); |
| | | var inputBytes = Encoding.UTF8.GetBytes(inputJson); |
| | | await ws.SendAsync(inputBytes, WebSocketMessageType.Text, true, CancellationToken.None); |
| | | try |
| | | { |
| | | var buffer = new ArraySegment<byte>(new byte[1024 * 4]); |
| | | WebSocketReceiveResult result = null; |
| | | using (var ms = new MemoryStream()) |
| | | { |
| | | do |
| | | { |
| | | result = await ws.ReceiveAsync(buffer, CancellationToken.None); |
| | | ms.Write(buffer.Array, buffer.Offset, result.Count); |
| | | } |
| | | while (!result.EndOfMessage); |
| | | |
| | | ms.Seek(0, SeekOrigin.Begin); |
| | | if (result.MessageType == WebSocketMessageType.Text && !result.CloseStatus.HasValue) |
| | | { |
| | | using (var reader = new StreamReader(ms, Encoding.UTF8)) |
| | | { |
| | | string outputJson = reader.ReadToEnd(); |
| | | output = new ScadaDispatchOutput(); |
| | | output.Scadas = JsonHelper.Json2Object<Dictionary<string, Dictionary<DateTime, string>>>(outputJson); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log.Error(flowId, ex.Message); |
| | | } |
| | | finally |
| | | { |
| | | try |
| | | { |
| | | //关闭WebSocket |
| | | await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | Log.Error(flowId, "关闭WebSocket异常", ex); |
| | | } |
| | | ws.Abort(); |
| | | ws.Dispose(); |
| | | } |
| | | |
| | | return output; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 创建客户端实例 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public static async Task<ClientWebSocket> CreateAsync(string ServerUri) |
| | | { |
| | | var webSocket = new ClientWebSocket(); |
| | | webSocket.Options.RemoteCertificateValidationCallback = delegate { return true; }; |
| | | |
| | | await webSocket.ConnectAsync(new Uri(ServerUri), CancellationToken.None); |
| | | if (webSocket.State == WebSocketState.Open) |
| | | { |
| | | return webSocket; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private async Task<ScadaDispatchOutput> GetRealScada1(string flowId, ScadaDispatchInput input) |
| | | { |
| | | if (input == null) |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | //private async Task<ScadaDispatchOutput> GetRealScada(string flowId, ScadaDispatchInput input) |
| | | //{ |
| | | // if (input == null) |
| | | // { |
| | | // Log.Info(flowId, "ScadaDispatchInput is null"); |
| | | // return default; |
| | | // } |
| | | |
| | | // var ws = await CreateAsync("ws://localhost:5102/api/WebSocket/GetNotReadCount"); |
| | | // if (ws == null || ws.State != WebSocketState.Open) |
| | | // { |
| | | // Log.Info(flowId, "webSocket:连接失败!"); |
| | | // return default; |
| | | // } |
| | | // Log.Info(flowId, "webSocket:连接成功!"); |
| | | |
| | | // ScadaDispatchOutput output = null; |
| | | // var inputJson = JsonHelper.Object2FormatJson(input); |
| | | // Log.Debug(flowId, inputJson); |
| | | // var inputBytes = Encoding.UTF8.GetBytes(inputJson); |
| | | // await ws.SendAsync(inputBytes, WebSocketMessageType.Text, true, CancellationToken.None); |
| | | // try |
| | | // { |
| | | // var buffer = new ArraySegment<byte>(new byte[1024 * 4]); |
| | | // WebSocketReceiveResult result = null; |
| | | // using (var ms = new MemoryStream()) |
| | | // { |
| | | // do |
| | | // { |
| | | // result = await ws.ReceiveAsync(buffer, CancellationToken.None); |
| | | // ms.Write(buffer.Array, buffer.Offset, result.Count); |
| | | // } |
| | | // while (!result.EndOfMessage); |
| | | |
| | | // ms.Seek(0, SeekOrigin.Begin); |
| | | // if (result.MessageType == WebSocketMessageType.Text && !result.CloseStatus.HasValue) |
| | | // { |
| | | // using (var reader = new StreamReader(ms, Encoding.UTF8)) |
| | | // { |
| | | // string outputJson = reader.ReadToEnd(); |
| | | // output = new ScadaDispatchOutput(); |
| | | // output.Scadas = JsonHelper.Json2Object<Dictionary<string, Dictionary<DateTime, string>>>(outputJson); |
| | | // } |
| | | // } |
| | | // } |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // Log.Error(flowId, ex.Message); |
| | | // } |
| | | // finally |
| | | // { |
| | | // try |
| | | // { |
| | | // //关闭WebSocket |
| | | // await ws.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "AcknowledgeCloseframe", CancellationToken.None); |
| | | // } |
| | | // catch (Exception ex) |
| | | // { |
| | | // Log.Error(flowId, "关闭WebSocket异常", ex); |
| | | // } |
| | | // ws.Abort(); |
| | | // ws.Dispose(); |
| | | // } |
| | | |
| | | // return output; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 创建客户端实例 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //public static async Task<ClientWebSocket> CreateAsync(string ServerUri) |
| | | //{ |
| | | // var webSocket = new ClientWebSocket(); |
| | | // webSocket.Options.RemoteCertificateValidationCallback = delegate { return true; }; |
| | | |
| | | // await webSocket.ConnectAsync(new Uri(ServerUri), CancellationToken.None); |
| | | // if (webSocket.State == WebSocketState.Open) |
| | | // { |
| | | // return webSocket; |
| | | // } |
| | | // return null; |
| | | //} |
| | | |
| | | |
| | | } |
| | | } |