Exemplo n.º 1
0
        public void OnReply(RpcBroker.Message message)
        {
            Log.Trace("RpcClient.OnReply");

            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            if (this.Replies.TryAdd(message.Token, message) == false)
            {
                throw new InvalidOperationException("A reply to this message has already been dispatched");
            }
        }
Exemplo n.º 2
0
        public JSValue Invoke(String procedure, Object[] arguments, Int32 timeoutMsec = 5000)
        {
            Log.Trace("RpcClient.Invoke( procedure: {0} )", procedure);

            if (String.IsNullOrWhiteSpace(procedure))
            {
                throw new ArgumentException("procedure");
            }
            if (arguments == null)
            {
                throw new ArgumentNullException("arguments");
            }

            var request = new RpcBroker.Message
            {
                Procedure = procedure,
                Data      = new JSValue(arguments),
            };

            this.SendRequest(request);

            // spin until a reply has been received or timeout

            RpcBroker.Message reply;

            var spinCount = 0;

            while (this.Replies.TryGetValue(request.Token, out reply) == false)
            {
                if (spinCount > (timeoutMsec / 10))
                {
                    break;
                }
                Thread.Sleep(10);
                spinCount++;
            }

            if (reply == null)
            {
                throw new TimeoutException("A remote invocation has timed out before receiving a reply");
            }

            return(reply.Data);
        }
Exemplo n.º 3
0
        public void OnRequest(RpcBroker.Message message)
        {
            Log.Trace("RpcServer.OnRequest");

            if (message == null)
            {
                throw new ArgumentNullException("message");
            }

            if (this.RequestHandler == null)
            {
                return;
            }

            var replyData = this.RequestHandler(message.Data.Value as Object[]);

            var reply = new RpcBroker.Message(message.Token)
            {
                Procedure = message.Procedure,
                Data      = replyData,
            };

            this.SendReply(reply);
        }