Inheritance: ServiceMessage, ISendableRequest
Ejemplo n.º 1
0
 /// <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;
 }
Ejemplo n.º 3
0
        /// <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);
 }
Ejemplo n.º 6
0
 private void AddRequest(RequestMessage obj)
 {
     QueueObject q = new QueueObject( obj, _uid, null);
     _requestQueue.Add(q);
 }
Ejemplo n.º 7
0
        /// <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;
        }