public void IpcMessageConverterWriteAsync() { "读取消息头不对的数据,可以返回读取失败".Test(async() => { using var memoryStream = new MemoryStream(); ulong ack = 10; var buffer = new byte[] { 0x12, 0x12, 0x00 }; var messageHeader = new byte[] { 0x00, 0x00 }; var breakMessageHeader = new byte[] { 0x00, 0x01 }; await IpcMessageConverter.WriteAsync(memoryStream, messageHeader, ack, IpcMessageCommandType.Unknown, buffer, 0, buffer.Length, "test", null !); memoryStream.Position = 0; var ipcMessageResult = await IpcMessageConverter.ReadAsync(memoryStream, breakMessageHeader, new SharedArrayPool()); var success = ipcMessageResult.Success; var ipcMessageCommandType = ipcMessageResult.IpcMessageCommandType; Assert.AreEqual(false, success); Assert.AreEqual(IpcMessageCommandType.Unknown, ipcMessageCommandType); }); "读取消息头长度不对的数据,可以返回读取失败".Test(async() => { using var memoryStream = new MemoryStream(); var ipcConfiguration = new IpcConfiguration(); ulong ack = 10; var buffer = new byte[] { 0x12, 0x12, 0x00 }; var messageHeader = new byte[] { 0x00, 0x00 }; await IpcMessageConverter.WriteAsync(memoryStream, messageHeader, ack, IpcMessageCommandType.Unknown, buffer, 0, buffer.Length, "test", null !); memoryStream.Position = 0; var ipcMessageResult = await IpcMessageConverter.ReadAsync(memoryStream, ipcConfiguration.MessageHeader, new SharedArrayPool()); var success = ipcMessageResult.Success; var ipcMessageCommandType = ipcMessageResult.IpcMessageCommandType; Assert.AreEqual(false, success); Assert.AreEqual(IpcMessageCommandType.Unknown, ipcMessageCommandType); }); "写入的数据和读取的相同,可以读取到写入的数据".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, IpcMessageCommandType.Unknown, 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); }); }
public void BuildPeerRegisterMessage() { "如果注册消息的内容添加了其他内容,不会读取到不属于注册消息的内容".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); } // 写入其他内容 var streamWriter = new StreamWriter(memoryStream); streamWriter.Write("林德熙是逗比"); streamWriter.Flush(); memoryStream.Position = 0; var success = peerRegisterProvider.TryParsePeerRegisterMessage(memoryStream, out var peerName); Assert.AreEqual(true, success); Assert.AreEqual(pipeName, peerName); }); "如果消息不是对方的注册消息,那么将不修改Stream的起始".Test(() => { var peerRegisterProvider = new PeerRegisterProvider(); var memoryStream = new MemoryStream(); for (int i = 0; i < 1000; i++) { memoryStream.WriteByte(0x00); } const int position = 10; memoryStream.Position = position; var isPeerRegisterMessage = peerRegisterProvider.TryParsePeerRegisterMessage(memoryStream, out _); Assert.AreEqual(false, isPeerRegisterMessage); Assert.AreEqual(position, memoryStream.Position); }); "使用发送端之后,能序列化之前的字符串".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); }); }