private void HandleRequest(PeerMessageArgs args) { if (!args.MessageCommandType.HasFlag(IpcMessageCommandType.RequestMessage)) { // 如果没有命令标识,那么返回 return; } Stream message = args.Message; if (message.Length < RequestMessageHeader.Length + sizeof(ulong)) { return; } var currentPosition = message.Position; try { if (CheckRequestHeader(message)) { // 标记在这一级消费 args.SetHandle(message: nameof(HandleRequest)); var ipcClientRequestArgs = ParseRequestMessage(message); OnIpcClientRequestReceived?.Invoke(this, ipcClientRequestArgs); } } finally { message.Position = currentPosition; } }
/// <summary> /// 收到消息,包括收到别人的请求消息,和收到别人的响应消息 /// </summary> /// <param name="args"></param> public void OnReceiveMessage(PeerMessageArgs args) { HandleResponse(args); if (args.Handle) { return; } HandleRequest(args); }
private void HandleResponse(PeerMessageArgs args) { if (!args.MessageCommandType.HasFlag(IpcMessageCommandType.ResponseMessage)) { // 如果没有命令标识,那么返回 return; } Stream message = args.Message; if (message.Length < ResponseMessageHeader.Length + sizeof(ulong)) { return; } var currentPosition = message.Position; try { if (CheckResponseHeader(message)) { // 标记在这一级消费 args.SetHandle(message: nameof(HandleResponse)); var binaryReader = new BinaryReader(message); var messageId = binaryReader.ReadUInt64(); TaskCompletionSource <IpcBufferMessage>?task = null; lock (Locker) { if (TaskList.TryGetValue(messageId, out task)) { } else { return; } } if (task == null) { return; } var responseMessageLength = binaryReader.ReadInt32(); var responseMessageByteList = binaryReader.ReadBytes(responseMessageLength); task.SetResult(new IpcBufferMessage(responseMessageByteList)); } } finally { message.Position = currentPosition; } }
internal void OnMessageReceived(PeerMessageArgs e) { Logger.Debug($"[{nameof(IpcServerService)}] MessageReceived PeerName={e.PeerName} {e.Ack}"); MessageReceived?.Invoke(this, e); }
private void NamedPipeServerStreamPool_MessageReceived(object?sender, PeerMessageArgs e) { }
private void ServerStreamMessageReader_MessageReceived(object?sender, PeerMessageArgs e) { IpcMessageRequestManager.OnReceiveMessage(e); MessageReceived?.Invoke(sender, e); }