Exemple #1
0
        public async Task <AcknowledgeMessageExt> ReconnectAckAsync()
        {
            AcknowledgeMessageExt acknowledgeMessageExt1 = new AcknowledgeMessageExt();
            AcknowledgeMessageExt acknowledgeMessageExt2 = acknowledgeMessageExt1;
            AsObject asObject = await this.ReconnectAsync();

            acknowledgeMessageExt2.Body = (object)asObject;
            return(acknowledgeMessageExt1);
        }
Exemple #2
0
        public async Task <AcknowledgeMessageExt> ReconnectAckAsync(int invokeId, AsObject cParameters, params object[] parameters)
        {
            AcknowledgeMessageExt acknowledgeMessageExt1 = new AcknowledgeMessageExt();
            AcknowledgeMessageExt acknowledgeMessageExt2 = acknowledgeMessageExt1;
            AsObject asObject = await this.ReconnectAsync(invokeId, cParameters, parameters);

            acknowledgeMessageExt2.Body = (object)asObject;
            return(acknowledgeMessageExt1);
        }
Exemple #3
0
        public void InvokeResult(int invokeId, string correlationId, object argument)
        {
            var call = new AcknowledgeMessageExt()
            {
                ClientId      = Uuid.NewUuid(),
                MessageId     = Uuid.NewUuid(),
                Body          = argument,
                CorrelationId = correlationId,
            };

            InvokeResult(invokeId, call);
        }
Exemple #4
0
        void ServerCommandReceived(object sender, CommandMessageReceivedEventArgs e)
        {
            RtmpClient client = (RtmpClient)sender;

            switch (e.Message.Operation)
            {
            case CommandOperation.Login:
                AcknowledgeMessageExt login = new AcknowledgeMessageExt
                {
                    Body          = "success",
                    CorrelationId = e.Message.MessageId,
                    MessageId     = Uuid.NewUuid(),
                    ClientId      = Uuid.NewUuid(),
                    Headers       = new AsObject
                    {
                        { "DSMessagingVersion", 1.0 },
                        { FlexMessageHeaders.FlexClientId, e.DSId }
                    }
                };

                client.InvokeResult(e.InvokeId, login);
                break;

            case CommandOperation.Subscribe:
                AcknowledgeMessageExt subscribe = new AcknowledgeMessageExt
                {
                    Body          = null,
                    CorrelationId = e.Message.MessageId,
                    MessageId     = Uuid.NewUuid(),
                    ClientId      = e.Message.ClientId
                };

                client.InvokeResult(e.InvokeId, subscribe);
                break;

            case CommandOperation.Unsubscribe:
                break;

            case CommandOperation.ClientPing:
                break;

            case CommandOperation.Logout:
                break;

            default:
                throw new NotSupportedException();
            }

            if (ClientCommandReceieved != null)
            {
                ClientCommandReceieved(sender, e);
            }
        }
Exemple #5
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 InvokeResult(int invokeId, AcknowledgeMessageExt 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("_result", new object[1]
            {
                (object)message
            }, 1 != 0, CallStatus.Result);
            this.QueueCommandAsTask((Command)invokeAmf3, 3, 0);
        }
Exemple #7
0
        private void EventReceivedCallback(object sender, EventReceivedEventArgs e)
        {
            try
            {
                switch (e.Event.MessageType)
                {
                case MessageType.UserControlMessage:
                    UserControlMessage userControlMessage = (UserControlMessage)e.Event;
                    if (userControlMessage.EventType != UserControlMessageType.PingRequest)
                    {
                        break;
                    }
                    this.WriteProtocolControlMessage((RtmpEvent) new UserControlMessage(UserControlMessageType.PingResponse, userControlMessage.Values));
                    break;

                case MessageType.CommandAmf3:
                case MessageType.DataAmf0:
                case MessageType.CommandAmf0:
                    Command command    = (Command)e.Event;
                    Method  methodCall = command.MethodCall;
                    object  obj1       = methodCall.Parameters.Length == 1 ? methodCall.Parameters[0] : (object)methodCall.Parameters;
                    if (methodCall.Name == "_result" && !(obj1 is AcknowledgeMessageExt))
                    {
                        AcknowledgeMessageExt acknowledgeMessageExt = new AcknowledgeMessageExt();
                        object obj2 = obj1;
                        acknowledgeMessageExt.Body = obj2;
                        AcknowledgeMessageExt result = acknowledgeMessageExt;
                        this._callbackManager.SetResult(command.InvokeId, result);
                        break;
                    }
                    if (methodCall.Name == "_result")
                    {
                        AcknowledgeMessageExt result = (AcknowledgeMessageExt)obj1;
                        this._callbackManager.SetResult(command.InvokeId, result);
                        break;
                    }
                    if (methodCall.Name == "_error")
                    {
                        ErrorMessage errorMessage = (ErrorMessage)obj1;
                        this._callbackManager.SetException(command.InvokeId, errorMessage != null ? (Exception) new InvocationException(errorMessage) : (Exception) new InvocationException());
                        break;
                    }
                    if (methodCall.Name == "receive")
                    {
                        AsyncMessageExt message = (AsyncMessageExt)obj1;
                        if (message == null)
                        {
                            break;
                        }
                        object obj2;
                        message.Headers.TryGetValue("DSSubtopic", out obj2);
                        string dsSubtopic = obj2 as string;
                        string clientId   = message.ClientId;
                        this.WrapCallback((Action)(() =>
                        {
                            // ISSUE: reference to a compiler-generated field
                            EventHandler <MessageReceivedEventArgs> messageReceived = this.MessageReceived;
                            if (messageReceived == null)
                            {
                                return;
                            }
                            MessageReceivedEventArgs e1 = new MessageReceivedEventArgs(clientId, dsSubtopic, message);
                            messageReceived((object)this, e1);
                        }));
                        break;
                    }
                    int num = methodCall.Name == "onstatus" ? 1 : 0;
                    break;
                }
            }
            catch (ClientDisconnectedException ex)
            {
                this.Close();
            }
        }
        private void EventReceivedCallback(object sender, EventReceivedEventArgs e)
        {
            try
            {
                switch (e.Event.MessageType)
                {
                case MessageType.UserControlMessage:
                    var m = (UserControlMessage)e.Event;
                    if (m.EventType == UserControlMessageType.PingRequest)
                    {
                        WriteProtocolControlMessage(new UserControlMessage(UserControlMessageType.PingResponse,
                                                                           m.Values));
                    }
                    break;

                case MessageType.DataAmf3:
#if DEBUG
                    // Have no idea what the contents of these packets are.
                    // Study these packets if we receive them.
                    Debugger.Break();
#endif
                    break;

                case MessageType.CommandAmf3:
                case MessageType.DataAmf0:
                case MessageType.CommandAmf0:
                    var command = (Command)e.Event;
                    var call    = command.MethodCall;

                    var param = call.Parameters.Length == 1 ? call.Parameters[0] : call.Parameters;
                    if (call.Name == "_result" && !(param is AcknowledgeMessageExt))
                    {
                        //wrap the parameter
                        var ack = new AcknowledgeMessageExt {
                            Body = param
                        };
                        callbackManager.SetResult(command.InvokeId, ack);
                    }
                    else if (call.Name == "_result")
                    {
                        var ack = (AcknowledgeMessageExt)param;
                        callbackManager.SetResult(command.InvokeId, ack);
                    }
                    else if (call.Name == "_error")
                    {
                        // unwrap Flex class, if present
                        var error = (ErrorMessage)param;
                        callbackManager.SetException(command.InvokeId,
                                                     error != null ? new InvocationException(error) : new InvocationException());
                    }
                    else if (call.Name == "receive")
                    {
                        var message = (AsyncMessageExt)param;
                        if (message == null)
                        {
                            break;
                        }

                        object subtopicObject;
                        message.Headers.TryGetValue(AsyncMessageHeaders.Subtopic, out subtopicObject);

                        var dsSubtopic = subtopicObject as string;
                        var clientId   = message.ClientId;

                        WrapCallback(() =>
                        {
                            if (MessageReceived != null)
                            {
                                MessageReceived(this, new MessageReceivedEventArgs(clientId, dsSubtopic, message));
                            }
                        });
                    }
                    else if (call.Name == "onstatus")
                    {
                        Debug.Print("Received status.");
                    }
                    else
                    {
#if DEBUG
                        Debug.Print("Unknown RTMP Command: " + call.Name);
                        Debugger.Break();
#endif
                    }
                    break;
                }
            }
            catch (ClientDisconnectedException)
            {
                Close();
            }
        }