Пример #1
0
        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);
        }