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); } })); }
internal Task <MessageBridgeResponse> SendRequestAsync(MessageBridgeRequest request) { return(Task.Run(() => { var serviceName = GetServiceName(request.BrowserId); var client = new MessageBridgeNamedPipeClient(this, serviceName, _cancellationTokenSource); return client.RequestAsync(request); }, _cancellationTokenSource.Token)); }
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); } })); }
public Task <MessageBridgeResponse> SendExecutionRequestAsync(MessageBridgeRequest request) { RequireRenderThread(); return(RenderSideBridge.SendRequestAsync(request)); }
public MessageBridgeResponse SendExecutionRequest(MessageBridgeRequest request) { return(RenderSideBridge.SendRequest(request)); }
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); }
//internal void SendProcessMessage(CefFrame frame, JavascriptMessage message) //{ // var msg = CefProcessMessage.Create(JAVASCRIPT_BRIDGE_MESSAGE); // msg.Arguments.SetString(0, message.ToJson()); // frame.SendProcessMessage(CefProcessId.Browser, msg); // msg.Dispose(); //} internal MessageBridgeResponse SendRequest(MessageBridgeRequest request) { return(SendRequestAsync(request).GetAwaiter().GetResult()); }