//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(); }); }
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); }); }
/// <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(); } }
//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(); }); }
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); }); }
/// <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(); } }