/// <summary> /// Get the stream data /// </summary> /// <param name="streamDataId"></param> /// <returns></returns> public System.IO.Stream GetAsyncResponseStreamData(string streamDataId) { if (streamDataId == null) { return(null); } string[] streamDataParts = streamDataId.Split('.'); Guid clientId = new Guid(streamDataParts[0]); QueuedResponsePayload payload = null; lock (streamIdToPayloadMap) { streamIdToPayloadMap.TryGetValue(streamDataId, out payload); } if (payload != null && payload.ClientId == clientId) { lock (streamIdToPayloadMap) streamIdToPayloadMap.Remove(streamDataId); return(payload.PayloadStream); } return(null); }
/// <summary> /// /// push the result ticket out to the client. The client then needs to turn around and call GetAsyncResponseData /// or GetAsyncResponseStreamData to get the data /// </summary> /// <param name="targetClientProxy"></param> /// <param name="message"></param> /// <param name="dataAttachment"></param> /// <param name="streamAttachment"></param> /// <param name="response"></param> public void PublishSendResponseTicket(ClientProxy targetClientProxy, string message, object dataAttachment, Stream streamAttachment, AsyncMethodResponse response) { QueuedResponsePayload payload = null; if (dataAttachment != null || streamAttachment != null) { payload = new QueuedResponsePayload(dataAttachment, response.AsyncTicket, response.ClientId, streamAttachment); if (payload.PayloadStream != null) { string payloadStreamId = string.Format("{0}.{1}", response.ClientId, payload.PayloadTicket); response.StreamDataId = payloadStreamId; lock (streamIdToPayloadMap) streamIdToPayloadMap[payloadStreamId] = payload; } else if (payload.PayloadData != null) { lock (payloadTicketToResponseMap) payloadTicketToResponseMap[payload.PayloadTicketGuid] = payload; } } Dictionary <Guid, ClientProxy> targetClientProxyMap = new Dictionary <Guid, ClientProxy>(); targetClientProxyMap.Add(targetClientProxy.ClientId, targetClientProxy); PublishSendResponseTicketEventArg psrtea = new PublishSendResponseTicketEventArg(DateTime.UtcNow, response, message, payload); this.Publish(targetClientProxyMap, true, psrtea, this.publishSendResponseTicketHandler); }
/// <summary> /// called by client to get the async call response /// </summary> /// <param name="clientId"></param> /// <param name="payloadTicket"></param> /// <returns></returns> public AsyncMethodResponse GetAsyncResponseData(Guid clientId, Guid payloadTicket) { QueuedResponsePayload payload = null; lock (payloadTicketToResponseMap) { payloadTicketToResponseMap.TryGetValue(payloadTicket, out payload); } if (payload != null && payload.ClientId == clientId) { AsyncMethodResponse response = new AsyncMethodResponse(clientId, payload.AsyncTicket); response.AsyncResponseData = payload.PayloadData; lock (payloadTicketToResponseMap) payloadTicketToResponseMap.Remove(payloadTicket); return(response); } AsyncMethodResponse error = new AsyncMethodResponse(clientId, null); error.AddError("Not found", ErrorCode.RecordNotFound); return(error); }
/// <summary> /// /// </summary> /// <param name="messageTimeUtc"></param> /// <param name="response"></param> /// <param name="message"></param> /// <param name="payload"></param> public PublishSendResponseTicketEventArg(DateTime messageTimeUtc, AsyncMethodResponse response, string message, QueuedResponsePayload payload) : base(messageTimeUtc, response, message) { this.Payload = payload; }