Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 收到消息,包括收到别人的请求消息,和收到别人的响应消息
        /// </summary>
        /// <param name="args"></param>
        public void OnReceiveMessage(PeerMessageArgs args)
        {
            HandleResponse(args);
            if (args.Handle)
            {
                return;
            }

            HandleRequest(args);
        }
Esempio n. 3
0
        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;
            }
        }
Esempio n. 4
0
 internal void OnMessageReceived(PeerMessageArgs e)
 {
     Logger.Debug($"[{nameof(IpcServerService)}] MessageReceived PeerName={e.PeerName} {e.Ack}");
     MessageReceived?.Invoke(this, e);
 }
Esempio n. 5
0
 private void NamedPipeServerStreamPool_MessageReceived(object?sender, PeerMessageArgs e)
 {
 }
        private void ServerStreamMessageReader_MessageReceived(object?sender, PeerMessageArgs e)
        {
            IpcMessageRequestManager.OnReceiveMessage(e);

            MessageReceived?.Invoke(sender, e);
        }