/// <summary> /// Send a request output data to the output or error stream /// </summary> /// <param name="request">Request</param> /// <param name="streamType"></param> /// <param name="data"></param> protected virtual void SendRequestOutput(Request request, MessageType streamType, ByteArray data) { if (streamType != MessageType.StandardError && streamType != MessageType.StandardOutput) throw new ArgumentException("streamType"); while (data.Count > 0) { ushort length = (ushort)Math.Min(data.Count, Consts.MaxMessageBodySize); this.SendMessage(new Message(streamType, request.Id, data.SubArray(0, length))); data = data.SubArray(length, true); } }
/// <summary> /// Ends a request /// </summary> /// <param name="request"><typeparamref name="Request"/> to end</param> protected virtual void EndRequest(Request request) { EndRequestMessageBody body = new EndRequestMessageBody(request.ExitCode, ProtocolStatus.RequestComplete); this.SendMessage(new Message(MessageType.StandardError, request.Id, ByteArray.Empty)); this.SendMessage(new Message(MessageType.StandardOutput, request.Id, ByteArray.Empty)); this.SendMessage(new Message(MessageType.EndRequest, request.Id, body.ToArray())); this.RemoveRequest(request); }
protected abstract void RemoveRequest(Request request);
protected abstract void AddRequest(Request request);