Пример #1
0
        //public Task WriteStringAsync(string text)
        //{
        //    var buffer = Encoding.UTF8.GetBytes(text);
        //    return WriteMessageAsync(buffer, 0, buffer.Length);
        //}

        internal async Task WriteMessageAsync(IpcBufferMessageContext ipcBufferMessageContext)
        {
            await QueueWriteAsync(async ack =>
            {
                await IpcMessageConverter.WriteAsync(NamedPipeClientStream, IpcConfiguration.MessageHeader, ack,
                                                     ipcBufferMessageContext, IpcContext.Logger);
                await NamedPipeClientStream.FlushAsync();
            });
        }
Пример #2
0
        private static Stream IpcBufferMessageContextToStream(IpcBufferMessageContext ipcBufferMessageContext)
        {
            var stream = new MemoryStream();

            foreach (var ipcBufferMessage in ipcBufferMessageContext.IpcBufferMessageList)
            {
                stream.Write(ipcBufferMessage.Buffer, ipcBufferMessage.Start, ipcBufferMessage.Count);
            }

            stream.Position = 0;
            return(stream);
        }
Пример #3
0
        public static async Task WriteAsync(Stream stream, byte[] messageHeader, Ack ack,
                                            IpcBufferMessageContext ipcBufferMessageContext, ILogger logger)
        {
            logger.Debug($"[{nameof(IpcMessageConverter)}] Start Write {ipcBufferMessageContext.Summary}");

            var binaryWriter = await WriteHeaderAsync(stream, messageHeader, ack);

            await binaryWriter.WriteAsync(ipcBufferMessageContext.Length);

            foreach (var ipcBufferMessage in ipcBufferMessageContext.IpcBufferMessageList)
            {
                await stream.WriteAsync(ipcBufferMessage.Buffer, ipcBufferMessage.Start, ipcBufferMessage.Count);
            }

            logger.Debug($"[{nameof(IpcMessageConverter)}] Finished Write {ipcBufferMessageContext.Summary}");
        }
Пример #4
0
        /// <summary>
        /// 向服务端发送消息
        /// </summary>
        /// <remarks>
        /// 框架层使用的
        /// </remarks>
        internal async Task WriteMessageAsync(IpcBufferMessageContext ipcBufferMessageContext)
        {
            await DoubleBufferTask.AddTaskAsync(WriteMessageAsyncInner);

            async Task WriteMessageAsyncInner()
            {
                await IpcMessageConverter.WriteAsync
                (
                    NamedPipeClientStream,
                    IpcConfiguration.MessageHeader,
                    AckManager.GetAck(),
                    ipcBufferMessageContext,
                    Logger
                );

                await NamedPipeClientStream.FlushAsync();
            }
        }
Пример #5
0
 public IpcClientRequestMessage(IpcBufferMessageContext ipcBufferMessageContext, Task <IpcBufferMessage> task, IpcClientRequestMessageId messageId)
 {
     IpcBufferMessageContext = ipcBufferMessageContext;
     Task      = task;
     MessageId = messageId;
 }