public Task <MessageBridgeResponse> RequestAsync(MessageBridgeRequest request) { return(Task.Run(() => { var pipe = new NamedPipeClientStream(_pipeName); try { pipe.Connect(); var reader = new StreamReader(pipe); var writer = new StreamWriter(pipe); writer.Write(request.ToJson()); writer.Flush(); pipe.WaitForPipeDrain(); var json = reader.ReadToEnd(); if (string.IsNullOrEmpty(json)) { return MessageBridgeResponse.CreateFailureResponse("No content."); } pipe.Close(); pipe.Dispose(); return MessageBridgeResponse.CreateSuccessResponse(json); } catch (Exception ex) { return MessageBridgeResponse.CreateFailureResponse(ex.Message); } })); }
public Task <MessageBridgeResponse> RequestAsync(MessageBridgeRequest request) { return(Task.Run(() => { var pipe = new NamedPipeClientStream(_pipeName); try { pipe.Connect(); pipe.ReadMode = PipeTransmissionMode.Message; var buff = Encoding.UTF8.GetBytes(request.ToJson()); pipe.Write(buff, 0, buff.Length); pipe.Flush(); pipe.WaitForPipeDrain(); buff = new byte[BUFFER_SIZE]; var ms = new MemoryStream(); do { ms.Write(buff, 0, pipe.Read(buff, 0, buff.Length)); }while (!pipe.IsMessageComplete); var json = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); ms.Dispose(); buff = null; if (string.IsNullOrEmpty(json)) { return MessageBridgeResponse.CreateFailureResponse("No content."); } pipe.Close(); pipe.Dispose(); return MessageBridgeResponse.CreateSuccessResponse(json); } catch (Exception ex) { return MessageBridgeResponse.CreateFailureResponse(ex.Message); } })); }
private void AcceptClient(NamedPipeServerStream pipe) { Task.Run(() => { try { var buff = new byte[BUFFER_SIZE]; var ms = new MemoryStream(); do { ms.Write(buff, 0, pipe.Read(buff, 0, buff.Length)); }while (!pipe.IsMessageComplete); var body = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); ms.Dispose(); buff = null; var request = MessageBridgeRequest.Create(body); MessageBridgeResponse response = null; foreach (var handler in JavascriptBridge.JavascriptRequestHandlers) { try { var retval = handler?.Invoke(request); if (retval != null) { response = retval; break; } } catch (Exception ex) { response = MessageBridgeResponse.CreateFailureResponse(ex.Message); } } if (response == null) { response = MessageBridgeResponse.CreateFailureResponse("Can't found handler for this request."); } buff = Encoding.UTF8.GetBytes(response.ToJson()); try { pipe.Write(buff, 0, buff.Length); pipe.Flush(); pipe.WaitForPipeDrain(); } catch (Exception ex) { WinFormium.GetLogger().Debug($"NamedPipeServer can't write to client. {ex.Message}"); } finally { pipe.Disconnect(); } } catch (Exception ex) { WinFormium.GetLogger().Error(ex); } }, CancellationToken); }