Ejemplo n.º 1
0
        public AMessage GetResponse(AMessage message)
        {
            if (message == null)
            {
                return(null);
            }

            AMessage result = null;

            switch (message.Id)
            {
            // ---- Call ----
            case MessageId.CallRequest:
                CallRequest callRequest = (CallRequest)message;
                result = callHandler.HandleCallRequest(callRequest);
                if (result == null)
                {
                    lock (sync)
                    {
                        // Add the call request to the queue
                        pendingRequests.Add(callRequest);
                    }
                    // Send a method info request
                    MethodInfoRequest methodInfoRequest = new MethodInfoRequest();
                    methodInfoRequest.MethodInfoId = callRequest.MethodInfoId;
                    result = methodInfoRequest;
                }
                break;

            case MessageId.CallAnswer:
                callHandler.HandleCallAnswer((CallAnswer)message);
                break;

            // ---- MethodInfo ----
            case MessageId.MethodInfoRequest:
                result = callHandler.HandleMethodInfoRequest((MethodInfoRequest)message);
                break;

            case MessageId.MethodInfoAnswer:
                MethodInfoAnswer methodInfoAnswer = (MethodInfoAnswer)message;
                callHandler.HandleMethodInfoAnswer(methodInfoAnswer);

                CallRequest pendingCallRequest = null;
                lock (sync)
                {
                    for (int i = 0; i < pendingRequests.Count; i++)
                    {
                        if (pendingRequests[i].MethodInfoId == methodInfoAnswer.MethodInfoId)
                        {
                            // We got the answer for a method info
                            pendingCallRequest = pendingRequests[i];
                            pendingRequests.RemoveAt(i);
                        }
                    }
                }
                if (pendingCallRequest != null)
                {
                    result = callHandler.HandleCallRequest(pendingCallRequest);
                }
                break;

            // ---- ConnectionInfo ----
            case MessageId.ConnectionInfoRequest:
                result = HandleConnectionInfoRequest((ConnectionInfoRequest)message);
                break;

            case MessageId.ConnectionInfoAnswer:
                HandleConnectionInfoAnswer((ConnectionInfoAnswer)message);
                break;

            default:
                string errorMsg = string.Format("Messages of Id={0} and type={1} are not supported", message.Id, message.GetType());
                throw new NotSupportedException(errorMsg);
            }
            return(result);
        }
Ejemplo n.º 2
0
 public MethodInfoAnswer HandleMethodInfoRequest(MethodInfoRequest methodInfoRequest)
 {
     throw new NotImplementedException();
 }