/// <summary> /// Generate String from requestMessage /// </summary> /// <param name="request">request message</param> /// <returns>request message in serialized form</returns> private string GenerateStringFromRequest(RequestMessage request) { StringBuilder requestStringBuilder = new StringBuilder(); SimplTypesScope.Serialize(request, requestStringBuilder, StringFormat.Xml); return requestStringBuilder.ToString(); }
public RequestQueueObject(RequestMessage requestMessage, long uid, TaskCompletionSource<ResponseMessage> tcs) { RequestMessage = requestMessage; Uid = uid; Tcs = tcs; }
/// <summary> /// Send Request Message asynchronously and get response /// </summary> /// <param name="request">request message</param> /// <returns>response message</returns> public async Task<ResponseMessage> RequestAsync(RequestMessage request) { TaskCompletionSource<ResponseMessage> tcs = new TaskCompletionSource<ResponseMessage>(); long currentMessageUid = GenerateUid(); RequestQueueObject queueRequest = new RequestQueueObject(request, currentMessageUid, tcs); _pendingRequests.Put(currentMessageUid, queueRequest); _requestQueue.Add(queueRequest); return await tcs.Task; }
/// <summary> /// process the deserialized request message /// </summary> /// <param name="requestMessage">deserialized request message</param> /// <returns>response message</returns> protected ResponseMessage ProcessRequest(RequestMessage requestMessage) { LastActivity = DateTime.Now.Ticks; ResponseMessage response = null; if (requestMessage == null) { Console.WriteLine("No request."); } else { if (!Initialized) { // special processing for InitConnectionRequest if (requestMessage is InitConnectionRequest) { string incomingSessionId = ((InitConnectionRequest)requestMessage).SessionId; if (incomingSessionId == null) { // client is not expecting an old ContextManager response = new InitConnectionResponse(SessionId); } else { // client is expecting an old ContextManager FrontEnd.RestoreContextManagerFromSessionId(incomingSessionId, SessionId, this); response = new InitConnectionResponse(SessionId); } Initialized = true; } } else { response = PerformService(requestMessage); } } return response; }
/// <summary> /// perform service that specified in the request message /// </summary> /// <param name="requestMessage">request message</param> /// <returns>response message</returns> protected virtual ResponseMessage PerformService(RequestMessage requestMessage) { return requestMessage.PerformService(LocalScope); }
private void AddRequest(RequestMessage obj) { QueueObject q = new QueueObject( obj, _uid, null); _requestQueue.Add(q); }
/// <summary> /// /// </summary> /// <param name="requestMessage"> </param> /// <returns></returns> public async Task<ResponseMessage> RequestAsync(RequestMessage requestMessage) { TaskCompletionSource<ResponseMessage> tcs = new TaskCompletionSource<ResponseMessage>(); int uid = _uid++; QueueObject queueRequest = new QueueObject(requestMessage, uid, tcs); _pendingRequests.Put(uid, queueRequest); _requestQueue.Add(queueRequest); return await tcs.Task; }