예제 #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
        public void BuildPeerRegisterMessage()
        {
            "使用发送端之后,能序列化之前的字符串".Test(async() =>
            {
                var peerRegisterProvider = new PeerRegisterProvider();
                var pipeName             = "123";
                var bufferMessageContext = peerRegisterProvider.BuildPeerRegisterMessage(pipeName);
                var memoryStream         = new MemoryStream(bufferMessageContext.Length);
                var ipcConfiguration     = new IpcConfiguration();

                await IpcMessageConverter.WriteAsync(memoryStream, ipcConfiguration.MessageHeader, 10, bufferMessageContext, null !);

                memoryStream.Position           = 0;
                var(success, ipcMessageContext) = await IpcMessageConverter.ReadAsync(memoryStream, ipcConfiguration.MessageHeader, new SharedArrayPool());

                Assert.AreEqual(true, success);

                var stream = new ByteListMessageStream(ipcMessageContext);
                success    = peerRegisterProvider.TryParsePeerRegisterMessage(stream, out var peerName);

                Assert.AreEqual(true, success);

                Assert.AreEqual(pipeName, peerName);
            });

            "创建的注册服务器名内容可以序列化,序列化之后可以反序列化出服务器名".Test(() =>
            {
                // 创建的内容可以序列化
                var peerRegisterProvider = new PeerRegisterProvider();
                var pipeName             = "123";
                var bufferMessageContext = peerRegisterProvider.BuildPeerRegisterMessage(pipeName);
                var memoryStream         = new MemoryStream(bufferMessageContext.Length);

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

                memoryStream.Position = 0;

                var success = peerRegisterProvider.TryParsePeerRegisterMessage(memoryStream, out var peerName);

                Assert.AreEqual(true, success);
                Assert.AreEqual(pipeName, peerName);
            });
        }
예제 #3
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();
            }
        }
예제 #4
0
        //internal async Task WriteMessageAsync(IpcBufferMessage ipcBufferMessage)
        //{
        //    await QueueWriteAsync(async ack =>
        //    {
        //        await IpcMessageConverter.WriteAsync(NamedPipeClientStream, IpcConfiguration.MessageHeader, ack,
        //            ipcBufferMessage);
        //        await NamedPipeClientStream.FlushAsync();
        //    });
        //}

        public async Task WriteMessageAsync(byte[] buffer, int offset, int count,
                                            [CallerMemberName] string summary = null !)
        {
            await QueueWriteAsync(async ack =>
            {
                await IpcMessageConverter.WriteAsync
                (
                    NamedPipeClientStream,
                    IpcConfiguration.MessageHeader,
                    ack,
                    buffer,
                    offset,
                    count,
                    summary,
                    Logger
                );
                await NamedPipeClientStream.FlushAsync();
            });
        }
예제 #5
0
        public void IpcMessageConverterWriteAsync()
        {
            "写入的数据和读取的相同,可以读取到写入的数据".Test(async() =>
            {
                // 写入的数据和读取的相同
                using var memoryStream = new MemoryStream();

                var ipcConfiguration = new IpcConfiguration();
                ulong ack            = 10;
                var buffer           = new byte[] { 0x12, 0x12, 0x00 };
                await IpcMessageConverter.WriteAsync(memoryStream, ipcConfiguration.MessageHeader, ack, buffer, 0,
                                                     buffer.Length, "test", null !);

                memoryStream.Position           = 0;
                var(success, ipcMessageContext) = await IpcMessageConverter.ReadAsync(memoryStream,
                                                                                      ipcConfiguration.MessageHeader, new SharedArrayPool());

                Assert.AreEqual(true, success);
                Assert.AreEqual(ack, ipcMessageContext.Ack.Value);
            });
        }
예제 #6
0
        /// <summary>
        /// 向服务端发送消息
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="offset"></param>
        /// <param name="count"></param>
        /// <param name="summary">这一次写入的是什么内容,用于调试</param>
        /// <returns></returns>
        /// <remarks>
        /// 业务层使用的
        /// </remarks>
        public async Task WriteMessageAsync(byte[] buffer, int offset, int count,
                                            [CallerMemberName] string summary = null !)
        {
            await DoubleBufferTask.AddTaskAsync(WriteMessageAsyncInner);

            async Task WriteMessageAsyncInner()
            {
                await IpcMessageConverter.WriteAsync
                (
                    NamedPipeClientStream,
                    IpcConfiguration.MessageHeader,
                    AckManager.GetAck(),
                    // 表示这是业务层的消息
                    IpcMessageCommandType.Business,
                    buffer,
                    offset,
                    count,
                    summary,
                    Logger
                );

                await NamedPipeClientStream.FlushAsync();
            }
        }