Exemple #1
0
        public async Task <T> InvokeAsync <T>(string endpoint, string destination, string method, object[] arguments)
        {
            if (objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }

            var remotingMessage = new RemotingMessage
            {
                ClientId    = Guid.NewGuid().ToString("D"),
                Destination = destination,
                Operation   = method,
                Body        = arguments,
                Headers     = new Dictionary <string, object>()
                {
                    { FlexMessageHeaders.Endpoint, endpoint },
                    { FlexMessageHeaders.FlexClientId, ClientId ?? "nil" }
                }
            };

            var invoke = new InvokeAmf3()
            {
                InvokeId   = GetNextInvokeId(),
                MethodCall = new Method(null, new object[] { remotingMessage })
            };
            var result = await QueueCommandAsTask(invoke, 3, 0);

            return((T)MiniTypeConverter.ConvertTo(result, typeof(T)));
        }
Exemple #2
0
        internal async Task <T> InvokeAsync <T>(RemotingMessage message)
        {
            var invoke = new InvokeAmf3()
            {
                InvokeId   = GetNextInvokeId(),
                MethodCall = new Method(null, new object[] { message })
            };
            var result = await QueueCommandAsTask(invoke, 3, 0);

            return((T)MiniTypeConverter.ConvertTo(result, typeof(T)));
        }
Exemple #3
0
        internal async Task <AcknowledgeMessageExt> InvokeAckAsync(int invokeId, RemotingMessage message)
        {
            InvokeAmf3 invokeAmf3 = new InvokeAmf3();

            invokeAmf3.InvokeId   = invokeId;
            invokeAmf3.MethodCall = new Method((string)null, new object[1]
            {
                (object)message
            }, 1 != 0, CallStatus.Request);
            return(await this.QueueCommandAsTask((Command)invokeAmf3, 3, 0, true));
        }
Exemple #4
0
        internal async Task <T> InvokeAsync <T>(RemotingMessage message)
        {
            InvokeAmf3 invokeAmf3 = new InvokeAmf3();

            invokeAmf3.InvokeId   = this.GetNextInvokeId();
            invokeAmf3.MethodCall = new Method((string)null, new object[1]
            {
                (object)message
            }, 1 != 0, CallStatus.Request);
            return((T)MiniTypeConverter.ConvertTo((await this.QueueCommandAsTask((Command)invokeAmf3, 3, 0, true)).Body, typeof(T)));
        }
        internal async Task <AcknowledgeMessageExt> InvokeAckAsync(int invokeId, RemotingMessage message)
        {
            //TODO: this is very bad
            //this.invokeId = invokeId;

            var invoke = new InvokeAmf3
            {
                InvokeId   = invokeId,
                MethodCall = new Method(null, new object[] { message })
            };

            return(await QueueCommandAsTask(invoke, 3, 0));
        }
Exemple #6
0
        internal void InvokeResult(int invokeId, AcknowledgeMessageExt message)
        {
            if (objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }

            var invoke = new InvokeAmf3()
            {
                InvokeId   = invokeId,
                MethodCall = new Method("_result", new object[] { message }, true, CallStatus.Result)
            };

            QueueCommandAsTask(invoke, 3, 0);
        }
        internal void InvokeError(int invokeId, ErrorMessage message)
        {
            if (this._objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }
            InvokeAmf3 invokeAmf3 = new InvokeAmf3();

            invokeAmf3.InvokeId   = invokeId;
            invokeAmf3.MethodCall = new Method("_error", new object[1]
            {
                (object)message
            }, 0 != 0, CallStatus.Result);
            this.QueueCommandAsTask((Command)invokeAmf3, 3, 0);
        }
        internal void InvokeResult(int invokeId, AcknowledgeMessageExt message)
        {
            if (_objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }
            InvokeAmf3 invokeAmf3 = new InvokeAmf3();

            invokeAmf3.InvokeId   = invokeId;
            invokeAmf3.MethodCall = new Method("_result", new object[1]
            {
                message
            }, 1 != 0, CallStatus.Result);
            QueueCommandAsTask(invokeAmf3, 3, 0);
        }
        internal void InvokeError(int invokeId, ErrorMessage message)
        {
            if (objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }

            var invoke = new InvokeAmf3
            {
                InvokeId   = invokeId,
                MethodCall = new Method("_error", new object[] { message }, false, CallStatus.Result)
            };

            QueueCommandAsTask(invoke, 3, 0);
        }
Exemple #10
0
        public async Task <T> InvokeAsync <T>(string endpoint, string destination, string method, object[] arguments)
        {
            if (this._objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }
            RemotingMessage remotingMessage1 = new RemotingMessage();
            string          clientId         = this.ClientId;

            remotingMessage1.ClientId = clientId;
            string str1 = destination;

            remotingMessage1.Destination = str1;
            string str2 = method;

            remotingMessage1.Operation = str2;
            object[] objArray = arguments;
            remotingMessage1.Body    = (object)objArray;
            remotingMessage1.Headers = new AsObject()
            {
                {
                    "DSEndpoint",
                    (object)endpoint
                },
                {
                    "DSId",
                    (object)(this.ClientId ?? "nil")
                },
                {
                    "DSRequestTimeout",
                    (object)60
                }
            };
            RemotingMessage remotingMessage2 = remotingMessage1;
            InvokeAmf3      invokeAmf3       = new InvokeAmf3();

            invokeAmf3.InvokeId   = this.GetNextInvokeId();
            invokeAmf3.MethodCall = new Method((string)null, new object[1]
            {
                remotingMessage2
            }, 1 != 0, CallStatus.Request);
            return((T)MiniTypeConverter.ConvertTo((await this.QueueCommandAsTask(invokeAmf3, 3, 0, true)).Body, typeof(T)));
        }
Exemple #11
0
 public async Task <T> InvokeAsync <T>(string endpoint, string destination, string method, object[] arguments)
 {
     try
     {
         if (_objectEncoding != ObjectEncoding.Amf3)
         {
             throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
         }
         RemotingMessage remotingMessage = new RemotingMessage()
         {
             ClientId    = ClientId,
             Destination = destination,
             Operation   = method,
             Body        = arguments,
             Headers     = new AsObject()
             {
                 {
                     "DSEndpoint", endpoint
                 },
                 {
                     "DSId", ClientId ?? "nil"
                 },
                 {
                     "DSRequestTimeout", 60
                 }
             }
         };
         InvokeAmf3 invokeAmf3 = new InvokeAmf3()
         {
             InvokeId   = GetNextInvokeId(),
             MethodCall = new Method(null, new object[1] {
                 remotingMessage
             }, 1 != 0, CallStatus.Request)
         };
         return((T)MiniTypeConverter.ConvertTo((await QueueCommandAsTask(invokeAmf3, 3, 0, true)).Body, typeof(T)));
     }
     catch (Exception ex)
     {
         Tools.Log(ex.StackTrace);
         return(default(T));
     }
 }
Exemple #12
0
        public void InvokeReceive(string clientId, string subtopic, object body)
        {
            var invoke = new InvokeAmf3()
            {
                InvokeId   = 0,
                MethodCall = new Method("receive", new object[]
                {
                    new AsyncMessageExt
                    {
                        Headers = new AsObject {
                            { FlexMessageHeaders.FlexSubtopic, subtopic }
                        },
                        ClientId  = clientId,
                        Body      = body,
                        MessageId = Uuid.NewUuid()
                    }
                })
            };

            QueueCommandAsTask(invoke, 3, 0);
        }
Exemple #13
0
        public async Task <T> InvokeAsync <T>(string endpoint, string destination, string method, object[] arguments)
        {
            if (objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }
            var remotingMessage = new RemotingMessage
            {
                ClientId    = ClientId,//Guid.NewGuid().ToString("D"),
                Destination = destination,
                Operation   = method,
                Body        = arguments,
                Headers     = new AsObject
                {
                    { FlexMessageHeaders.Endpoint, endpoint },
                    { FlexMessageHeaders.FlexClientId, ClientId ?? "nil" },
                    { FlexMessageHeaders.RequestTimeout, 60 }
                }
            };

            var invoke = new InvokeAmf3()
            {
                InvokeId   = GetNextInvokeId(),
                MethodCall = new Method(null, new object[] { remotingMessage })
            };

            //HACK Return null if result is "_error"

            object result;

            try
            {
                result = await QueueCommandAsTask(invoke, 3, 0);
            }
            catch (InvocationException x)
            {
                throw x;
            }
            return((T)MiniTypeConverter.ConvertTo(result, typeof(T)));
        }
Exemple #14
0
        public async Task <T> InvokeAsync <T>(string endpoint, string destination, string method, object[] arguments)
        {
            if (this._objectEncoding != ObjectEncoding.Amf3)
            {
                throw new NotSupportedException("Flex RPC requires AMF3 encoding.");
            }
            RemotingMessage remotingMessage = new RemotingMessage()
            {
                ClientId    = ClientId,
                Destination = destination,
                Operation   = method,
                Body        = arguments,
                Headers     = new AsObject()
                {
                    {
                        "DSEndpoint",
                        (object)endpoint
                    },
                    {
                        "DSId",
                        (object)(this.ClientId ?? "nil")
                    },
                    {
                        "DSRequestTimeout",
                        (object)60
                    }
                }
            };

            InvokeAmf3 invokeAmf = new InvokeAmf3()
            {
                InvokeId   = this.GetNextInvokeId() + 536870911,
                MethodCall = new Method(null, new object[1]
                {
                    remotingMessage
                }, 1 != 0, CallStatus.Request)
            };

            return((T)MiniTypeConverter.ConvertTo((await this.QueueCommandAsTask(invokeAmf, 3, 0, true)).Body, typeof(T)));
        }
        internal void InvokeReceive(string clientId, string subtopic, object body)
        {
            InvokeAmf3 invokeAmf3_1 = new InvokeAmf3();

            invokeAmf3_1.InvokeId = 0;
            InvokeAmf3 invokeAmf3_2 = invokeAmf3_1;
            string     methodName   = "receive";

            object[]        parameters      = new object[1];
            int             index           = 0;
            AsyncMessageExt asyncMessageExt = new AsyncMessageExt();

            asyncMessageExt.Headers = new AsObject()
            {
                {
                    "DSSubtopic",
                    (object)subtopic
                }
            };
            string str1 = clientId;

            asyncMessageExt.ClientId = str1;
            object obj = body;

            asyncMessageExt.Body = obj;
            string str2 = Uuid.NewUuid();

            asyncMessageExt.MessageId = str2;
            parameters[index]         = (object)asyncMessageExt;
            int    num1   = 1;
            int    num2   = 0;
            Method method = new Method(methodName, parameters, num1 != 0, (CallStatus)num2);

            invokeAmf3_2.MethodCall = method;
            this.QueueCommandAsTask((Command)invokeAmf3_1, 3, 0);
        }