示例#1
0
 /// <summary>
 /// Initializes a new instance of the RtmpContext class.
 /// </summary>
 /// <param name="mode"></param>
 public RtmpContext(RtmpMode mode)
 {
     //_mode = mode;
     _readerWriterLock = new FastReaderWriterLock();
     SetMode(mode);
     _objectEncoding = ObjectEncoding.AMF0;
 }
示例#2
0
        public static StatusASO GetStatusObject(string statusCode, ObjectEncoding objectEncoding)
        {
            switch (statusCode)
            {
            case "NetConnection.Call.Failed":
                return(new StatusASO("NetConnection.Call.Failed", "error", string.Empty, null, objectEncoding));

            case "NetConnection.Call.BadVersion":
                return(new StatusASO("NetConnection.Call.BadVersion", "error", string.Empty, null, objectEncoding));

            case "NetConnection.Connect.AppShutdown":
                return(new StatusASO("NetConnection.Connect.AppShutdown", "error", string.Empty, null, objectEncoding));

            case "NetConnection.Connect.Closed":
                return(new StatusASO("NetConnection.Connect.Closed", "error", string.Empty, null, objectEncoding));

            case "NetConnection.Connect.Failed":
                return(new StatusASO("NetConnection.Connect.Failed", "error", string.Empty, null, objectEncoding));

            case "NetConnection.Connect.Rejected":
                return(new StatusASO("NetConnection.Connect.Rejected", "error", string.Empty, null, objectEncoding));

            case "NetConnection.Connect.Success":
                return(new StatusASO("NetConnection.Connect.Success", "status", string.Empty, null, objectEncoding));
            }
            return(new StatusASO("NetConnection.Call.BadVersion", "error", string.Empty, null, objectEncoding));
        }
示例#3
0
        // this method is required because of the functionality specified by classes like `IDataOutput`.
        public void WriteAmfItem(ObjectEncoding encoding, object data)
        {
            // if it's null, we don't need to do expensive operations to determine how to write it
            if (data == null)
            {
                WriteMarker(Amf0TypeMarkers.Null);
                return;
            }

            if (WriteAmf0ReferenceOnExistence(data))
            {
                return;
            }

            var type = data.GetType();

            switch (encoding)
            {
            case ObjectEncoding.Amf0:
                var writer = GetAmfWriter(Amf0Writers, type);
                writer.WriteData(this, data);
                break;

            case ObjectEncoding.Amf3:
                WriteMarker(Amf0TypeMarkers.Amf3Object);
                WriteAmf3Item(data);
                break;

            default:
                throw new ArgumentOutOfRangeException("encoding");
            }
        }
示例#4
0
 public void WriteAmfItem(ObjectEncoding objectEncoding, object data)
 {
     if (data == null)
     {
         this.WriteMarker(Amf0TypeMarkers.Null);
     }
     else
     {
         if (this.WriteAmf0ReferenceOnExistence(data))
         {
             return;
         }
         Type type = data.GetType();
         if (objectEncoding != ObjectEncoding.Amf0)
         {
             if (objectEncoding != ObjectEncoding.Amf3)
             {
                 throw new ArgumentOutOfRangeException("objectEncoding");
             }
             this.WriteMarker(Amf0TypeMarkers.Amf3Object);
             this.WriteAmf3Item(data);
         }
         else
         {
             AmfWriter.GetAmfWriter(AmfWriter.Amf0Writers, type).WriteData(this, data);
         }
     }
 }
示例#5
0
            // writes an object, with the specified encoding. if amf3 encoding is specified, then it is wrapped in an
            // amf0 envelope that says to upgrade the encoding to amf3
            public void WriteBoxedItem(ObjectEncoding encoding, object value)
            {
                if (value == null)
                {
                    WriteMarker(Marker.Null);
                }
                else if (ReferenceGet(value, out var index))
                {
                    WriteMarker(Marker.Reference);
                    b.WriteUInt16(index);
                }
                else
                {
                    switch (encoding)
                    {
                    case ObjectEncoding.Amf0:
                        WriteItemInternal(value);
                        break;

                    case ObjectEncoding.Amf3:
                        WriteMarker(Marker.Amf3Object);
                        amf3.WriteItem(value);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(encoding));
                    }
                }
            }
示例#6
0
        public RtmpServer(
            SerializationContext context,
            X509Certificate2 cert                      = null,
            ObjectEncoding object_encoding             = ObjectEncoding.Amf0,
            ParameterAuthCallback publishParameterAuth = null,
            ParameterAuthCallback playParameterAuth    = null,
            string bindIp         = "0.0.0.0",
            int bindRtmpPort      = 1935,
            int bindWebsocketPort = 1936
            )
        {
            this.Context = context;

            this.AmfEncoding = object_encoding;

            this.Certificate = cert;

            if (publishParameterAuth != null)
            {
                this.PublishParameterAuth = publishParameterAuth;
            }

            if (playParameterAuth != null)
            {
                this.PlayParameterAuth = playParameterAuth;
            }

            this._bindIp = bindIp;

            this._bindRtmpPort = bindRtmpPort;

            this._bindWebsocketPort = bindWebsocketPort;

            this.ClientWorkHandler();
        }
        // This method is required because of the functionality specified by classes like `IDataOutput`.
        public void WriteAmfItem(ObjectEncoding objectEncoding, object data)
        {
            // Short circuit - no need to perform expensive operations to write a null
            if (data == null)
            {
                WriteMarker(Amf0TypeMarkers.Null);
                return;
            }

            if (WriteAmf0ReferenceOnExistence(data))
            {
                return;
            }
            var type = data.GetType();

            switch (objectEncoding)
            {
            case ObjectEncoding.Amf0:
                var writer = GetAmfWriter(Amf0Writers, type);
                writer.WriteData(this, data);
                break;

            case ObjectEncoding.Amf3:
                WriteMarker(Amf0TypeMarkers.Amf3Object);
                WriteAmf3Item(data);
                break;

            default:
                throw new ArgumentOutOfRangeException("objectEncoding");
            }
        }
示例#8
0
        /// <summary>
        /// AMF0ASObjectReader->3
        /// </summary>
        /// <param name="objectEncoding"></param>
        /// <param name="asObject"></param>
        public void WriteASObject(ObjectEncoding objectEncoding, ASObject asObject)
        {
            if (asObject != null)
            {
                AddAMF0ObjectReference(asObject);

                if (asObject.TypeName == null)
                {
                    WriteByte(AMF0TypeCode.ASObject);
                }
                else
                {
                    WriteByte(AMF0TypeCode.CustomClass);

                    WriteUTF(asObject.TypeName);
                }

                foreach (KeyValuePair <string, object> entry in asObject)
                {
                    WriteUTF(entry.Key);

                    WriteData(objectEncoding, entry.Value);
                }

                WriteEndMarkup();
            }
            else
            {
                WriteNull();
            }
        }
示例#9
0
        /// <summary>
        /// Gets a Status ActionScript Object with the specified status code.
        /// </summary>
        /// <param name="statusCode">Status code.</param>
        /// <param name="objectEncoding">Encoding.</param>
        /// <returns>A Status ActionScript Object.</returns>
        public static StatusASO GetStatusObject(string statusCode, ObjectEncoding objectEncoding)
        {
            switch (statusCode)
            {
            case NC_CALL_FAILED:
                return(new StatusASO(NC_CALL_FAILED, ERROR, string.Empty, null, objectEncoding));

            case NC_CALL_BADVERSION:
                return(new StatusASO(NC_CALL_BADVERSION, ERROR, string.Empty, null, objectEncoding));

            case NC_CONNECT_APPSHUTDOWN:
                return(new StatusASO(NC_CONNECT_APPSHUTDOWN, ERROR, string.Empty, null, objectEncoding));

            case NC_CONNECT_CLOSED:
                return(new StatusASO(NC_CONNECT_CLOSED, STATUS, string.Empty, null, objectEncoding));

            case NC_CONNECT_FAILED:
                return(new StatusASO(NC_CONNECT_FAILED, ERROR, string.Empty, null, objectEncoding));

            case NC_CONNECT_REJECTED:
                return(new StatusASO(NC_CONNECT_REJECTED, ERROR, string.Empty, null, objectEncoding));

            case NC_CONNECT_SUCCESS:
                return(new StatusASO(NC_CONNECT_SUCCESS, STATUS, string.Empty, null, objectEncoding));

            default:
                return(new StatusASO(NC_CALL_BADVERSION, ERROR, string.Empty, null, objectEncoding));
            }
        }
示例#10
0
 public RtmpProxySource(SerializationContext serializationContext, Stream stream)
     : this(serializationContext)
 {
     this.DoHandshake(stream);
     this.EstablishThreads(stream);
     this._objectEncoding = ObjectEncoding.Amf3;
 }
示例#11
0
 public void WriteASO(ObjectEncoding objectEncoding, ASObject asObject)
 {
     if (asObject != null)
     {
         this.AddReference(asObject);
         if (asObject.TypeName == null)
         {
             this.BaseStream.WriteByte(3);
         }
         else
         {
             this.BaseStream.WriteByte(0x10);
             this.WriteUTF(asObject.TypeName);
         }
         foreach (KeyValuePair <string, object> pair in asObject)
         {
             this.WriteUTF(pair.Key.ToString());
             this.WriteData(objectEncoding, pair.Value);
         }
         this.WriteEndMarkup();
     }
     else
     {
         this.WriteNull();
     }
 }
示例#12
0
        internal void WriteBody(ObjectEncoding objectEncoding, AMFWriter writer)
        {
            writer.Reset();

            if (Target == null)
            {
                writer.WriteUTF("null");
            }
            else
            {
                writer.WriteUTF(Target);
            }

            if (Response == null)
            {
                writer.WriteUTF("null");
            }
            else
            {
                writer.WriteUTF(Response);
            }

            writer.WriteInt32(-1);

            WriteBodyData(objectEncoding, writer);
        }
示例#13
0
        public void WriteData(ObjectEncoding objectEncoding, object data)
        {
            if (data == null)
            {
                WriteNull();

                return;
            }

            Type type = data.GetType();

            if (amf0ObjectReferences.ContainsKey(data))
            {
                WriteReference(data);

                return;
            }

            IAMFWriter amfWriter = null;

            if (AmfWriterTable[0].ContainsKey(type))
            {
                amfWriter = AmfWriterTable[0][type] as IAMFWriter;
            }

            if (amfWriter == null)
            {
                if (type.BaseType != null)
                {
                    if (AmfWriterTable[0].ContainsKey(type.BaseType))
                    {
                        amfWriter = AmfWriterTable[0][type.BaseType] as IAMFWriter;
                    }
                }
            }

            if (amfWriter == null)
            {
                amfWriter = new AMF0ObjectWriter();
            }

            if (objectEncoding == ObjectEncoding.AMF0)
            {
                amfWriter.WriteData(this, data);
            }
            else
            {
                if (amfWriter.IsPrimitive)
                {
                    amfWriter.WriteData(this, data);
                }
                else
                {
                    WriteByte(AMF0TypeCode.AMF3Tag);

                    WriteAMF3Data(data);
                }
            }
        }
示例#14
0
 private void WriteHeader(AMFHeader header, ObjectEncoding objectEncoding)
 {
     base.Reset();
     base.WriteUTF(header.Name);
     base.WriteBoolean(header.MustUnderstand);
     base.WriteInt32(-1);
     base.WriteData(objectEncoding, header.Content);
 }
示例#15
0
 internal void WriteBody(ObjectEncoding objectEncoding, AMFWriter writer)
 {
     writer.Reset();
     writer.WriteUTF(Target ?? "null");
     writer.WriteUTF(Response ?? "null");
     writer.WriteInt32(-1);
     WriteBodyData(objectEncoding, writer);
 }
示例#16
0
 private void WriteHeader(AmfPacketHeader header, ObjectEncoding objectEncoding)
 {
     base.Reset();
     base.WriteUtfPrefixed(header.Name);
     base.WriteBoolean(header.MustUnderstand);
     base.WriteInt32(-1);
     base.WriteAmfItem(objectEncoding, header.Content);
 }
示例#17
0
 public StatusAsObject(string code, string level, string description, object application, ObjectEncoding objectEncoding)
 {
     this["code"] = code;
     this["level"] = level;
     this["description"] = description;
     this["application"] = application;
     this["objectEncoding"] = (double)objectEncoding;
 }
示例#18
0
 public StatusAsObject(string code, string level, string description, object application,
                       ObjectEncoding objectEncoding)
 {
     this["code"]           = code;
     this["level"]          = level;
     this["description"]    = description;
     this["application"]    = application;
     this["objectEncoding"] = (double)objectEncoding;
 }
示例#19
0
 /// <summary>
 /// Initializes a new instance of the ByteArray class.
 /// </summary>
 /// <param name="ms">The MemoryStream from which to create the current ByteArray.</param>
 public ByteArray(MemoryStream ms)
 {
     _memoryStream = ms;
     var amfReader = new AMFReader(_memoryStream);
     var amfWriter = new AMFWriter(_memoryStream);
     _dataOutput = new DataOutput(amfWriter);
     _dataInput = new DataInput(amfReader);
     _objectEncoding = ObjectEncoding.AMF3;
 }
示例#20
0
 public RtmpClient(Uri uri, ObjectEncoding objectEncoding, SerializationContext serializationContext, RemoteCertificateValidationCallback certificateValidator)
     : this(uri, serializationContext, objectEncoding)
 {
     if (certificateValidator == null)
     {
         throw new ArgumentNullException("certificateValidator");
     }
     this._certificateValidator = certificateValidator;
 }
示例#21
0
        public FlvPacketWriter(AmfWriter writer, ObjectEncoding objectEncoding)
        {
            this.objectEncoding = objectEncoding;
            this.writer         = writer;

            queuedPackets        = new ConcurrentQueue <RtmpPacket>();
            packetAvailableEvent = new AutoResetEvent(false);

            Continue = true;
        }
示例#22
0
 public RtmpPacketWriter(AmfWriter writer, ObjectEncoding objectEncoding)
 {
     this._objectEncoding       = objectEncoding;
     this._writer               = writer;
     this._rtmpHeaders          = new Dictionary <int, RtmpHeader>();
     this._rtmpPackets          = new Dictionary <int, RtmpPacket>();
     this._queuedPackets        = new ConcurrentQueue <RtmpPacket>();
     this._packetAvailableEvent = new AutoResetEvent(false);
     this.Continue              = true;
 }
示例#23
0
 private RemoteSharedObject(string name, string remotePath, object persistence, bool secure)
 {
     _name                = name;
     _path                = remotePath;
     _persistentSO        = !false.Equals(persistence);
     _secure              = secure;
     _objectEncoding      = ObjectEncoding.AMF0;
     _initialSyncReceived = false;
     _ownerMessage        = new SharedObjectMessage(null, null, -1, false);
 }
示例#24
0
 public AmfWriter(Stream stream, SerializationContext serializationContext, ObjectEncoding objectEncoding)
 {
     this._objectEncoding                = objectEncoding;
     this._underlying                    = new BinaryWriter(stream);
     this._amf0ObjectReferences          = new Dictionary <object, int>();
     this._amf3ObjectReferences          = new Dictionary <object, int>();
     this._amf3StringReferences          = new Dictionary <object, int>();
     this._amf3ClassDefinitionReferences = new Dictionary <ClassDescription, int>();
     this.SerializationContext           = serializationContext;
 }
示例#25
0
        /// <summary>
        /// Initializes a new instance of the ByteArray class.
        /// </summary>
        /// <param name="ms">The MemoryStream from which to create the current ByteArray.</param>
        public ByteArray(MemoryStream ms)
        {
            _memoryStream = ms;
            AMFReader amfReader = new AMFReader(_memoryStream);
            AMFWriter amfWriter = new AMFWriter(_memoryStream);

            _dataOutput     = new DataOutput(amfWriter);
            _dataInput      = new DataInput(amfReader);
            _objectEncoding = ObjectEncoding.AMF3;
        }
 void WriteData(AmfWriter writer, RtmpEvent o, ObjectEncoding encoding)
 {
     if (o is Command)
     {
         WriteCommandOrData(writer, o, encoding);
     }
     else if (o is ByteData)
     {
         writer.WriteBytes(((ByteData)o).Data);
     }
 }
        public RtmpPacketWriter(AmfWriter writer, ObjectEncoding objectEncoding)
        {
            this.objectEncoding = objectEncoding;
            this.writer = writer;

            rtmpHeaders = new Dictionary<int, RtmpHeader>();
            queuedPackets = new ConcurrentQueue<RtmpPacket>();
            packetAvailableEvent = new AutoResetEvent(false);

            Continue = true;
        }
示例#28
0
        public FlvPacketWriter(AmfWriter writer, ObjectEncoding objectEncoding)
        {
            this._objectEncoding = objectEncoding;

            this._writer = writer;

            _packetQueue = new ConcurrentQueue <RtmpPacket>();

            _packetAvailableEvent = new AutoResetEvent(false);

            _started = true;
        }
示例#29
0
        /// <summary>
        /// Initializes a new instance of the ByteArray class.
        /// </summary>
        /// <param name="buffer">The array of unsigned bytes from which to create the current ByteArray.</param>
        public ByteArray(byte[] buffer)
        {
            _memoryStream = new MemoryStream();
            _memoryStream.Write(buffer, 0, buffer.Length);
            _memoryStream.Position = 0;
            AMFReader amfReader = new AMFReader(_memoryStream);
            AMFWriter amfWriter = new AMFWriter(_memoryStream);

            _dataOutput     = new DataOutput(amfWriter);
            _dataInput      = new DataInput(amfReader);
            _objectEncoding = ObjectEncoding.AMF3;
        }
示例#30
0
        /// <summary>
        /// Initializes a new instance of the NetConnection class.
        /// </summary>
        public NetConnection()
        {
            _clientId       = null;
            _playerVersion  = "WIN 9,0,115,0";
            _objectEncoding = ObjectEncoding.AMF0;
            _headers        = new Dictionary <string, AMFHeader>();
            _client         = this;
#if !(SILVERLIGHT)
            _cookieContainer = new CookieContainer();
#endif
            TypeHelper._Init();
        }
示例#31
0
        void WriteData(AmfWriter writer, RtmpMessage o, ObjectEncoding encoding)
        {
            var command = o as Command;

            if (command.MethodCall == null)
            {
                WriteCommandOrData(writer, o, encoding);
            }
            else
            {
                writer.WriteBytes(command.Buffer);
            }
        }
示例#32
0
        private void WriteData(AmfWriter writer, RtmpEvent o, ObjectEncoding encoding)
        {
            Command command = o as Command;

            if (command.MethodCall == null)
            {
                this.WriteCommandOrData(writer, o, encoding);
            }
            else
            {
                writer.WriteBytes(command.Buffer);
            }
        }
示例#33
0
 public RtmpConnect(Socket client_socket, Stream stream, RtmpServer server, ushort client_id, SerializationContext context, ObjectEncoding objectEncoding = ObjectEncoding.Amf0, bool asyncMode = false)
 {
     ClientId            = client_id;
     clientSocket        = client_socket;
     this.server         = server;
     this.objectEncoding = objectEncoding;
     writer = new RtmpPacketWriter(new AmfWriter(stream, context, ObjectEncoding.Amf0, asyncMode), ObjectEncoding.Amf0);
     reader = new RtmpPacketReader(new AmfReader(stream, context, asyncMode));
     reader.EventReceived += EventReceivedCallback;
     reader.Disconnected  += OnPacketProcessorDisconnected;
     writer.Disconnected  += OnPacketProcessorDisconnected;
     callbackManager       = new TaskCallbackManager <int, object>();
 }
示例#34
0
 /// <summary>
 /// Initializes a new instance of the BaseConnection class.
 /// </summary>
 /// <param name="path">Scope path on server.</param>
 /// <param name="connectionId">Connection id.</param>
 /// <param name="parameters">Parameters passed from client.</param>
 internal BaseConnection(string path, string connectionId, IDictionary parameters)
 {
     _readerWriterLock = new FastReaderWriterLock();
     _readMessages     = new AtomicLong();
     _writtenMessages  = new AtomicLong();
     _droppedMessages  = new AtomicLong();
     //V4 GUID should be safe to remove the 4 so we can use the id for rtmpt
     _connectionId   = connectionId;
     _objectEncoding = ObjectEncoding.AMF0;
     _path           = path;
     _parameters     = parameters;
     SetIsClosed(false);
 }
示例#35
0
 internal void WriteBody(ObjectEncoding objectEncoding, AMFWriter writer)
 {
     writer.Reset();
     writer.WriteUTF(Target ?? "null");
     writer.WriteUTF(Response ?? "null");
     writer.WriteInt32(-1);
     WriteBodyData(objectEncoding, writer);
 }
示例#36
0
 public DataOutput(AmfWriter writer)
 {
     this.writer = writer;
     this.objectEncoding = ObjectEncoding.Amf3;
 }
示例#37
0
        /// <summary>
        /// Gets a Status ActionScript Object with the specified status code.
        /// </summary>
        /// <param name="statusCode">Status code.</param>
        /// <param name="objectEncoding">Encoding.</param>
        /// <returns>A Status ActionScript Object.</returns>
		public static StatusASO GetStatusObject(string statusCode, ObjectEncoding objectEncoding)
		{
			switch(statusCode)
			{
				case NC_CALL_FAILED:
					return new StatusASO(NC_CALL_FAILED, ERROR, string.Empty, null, objectEncoding);
				case NC_CALL_BADVERSION:
					return new StatusASO(NC_CALL_BADVERSION, ERROR, string.Empty, null, objectEncoding);
				case NC_CONNECT_APPSHUTDOWN:
					return new StatusASO(NC_CONNECT_APPSHUTDOWN, ERROR, string.Empty, null, objectEncoding);
				case NC_CONNECT_CLOSED:
					return new StatusASO(NC_CONNECT_CLOSED, STATUS, string.Empty, null, objectEncoding);
				case NC_CONNECT_FAILED:
					return new StatusASO(NC_CONNECT_FAILED, ERROR, string.Empty, null, objectEncoding);
				case NC_CONNECT_REJECTED:
					return new StatusASO(NC_CONNECT_REJECTED, ERROR, string.Empty, null, objectEncoding);
				case NC_CONNECT_SUCCESS:
					return new StatusASO(NC_CONNECT_SUCCESS, STATUS, string.Empty, null, objectEncoding);
				default:
					return new StatusASO(NC_CALL_BADVERSION, ERROR, string.Empty, null, objectEncoding);
			}
		}
示例#38
0
		/// <summary>
		/// Initializes a new instance of the StatusASO class.
		/// </summary>
        /// <param name="code">Status code.</param>
        /// <param name="level">Level.</param>
        /// <param name="description">Description.</param>
		/// <param name="application"></param>
		/// <param name="objectEncoding"></param>
        internal StatusASO(string code, string level, string description, object application, ObjectEncoding objectEncoding)
		{
			Add("code", code);
			Add("level", level);
			Add("description", description);
			Add("application", application);
			Add("objectEncoding", (double)objectEncoding);
		}
示例#39
0
		protected override void WriteBodyData(ObjectEncoding objectEncoding, AMFWriter writer)
		{
			writer.WriteData(objectEncoding, this.Content);
		}
示例#40
0
        void WriteCommandOrData(AmfWriter writer, RtmpEvent o, ObjectEncoding encoding)
        {
            var command = o as Command;
            var methodCall = command.MethodCall;
            var isInvoke = command is Invoke;

            // write the method name or result type (first section)
            var isRequest = methodCall.CallStatus == CallStatus.Request;
            if (isRequest)
                writer.WriteAmfItem(encoding, methodCall.Name);
            else
                writer.WriteAmfItem(encoding, methodCall.IsSuccess ? "_result" : "_error");

            if (isInvoke)
            {
                writer.WriteAmfItem(encoding, command.InvokeId);
                writer.WriteAmfItem(encoding, command.ConnectionParameters);
            }

            if (isRequest)
            {
                // write arguments
                foreach (var arg in methodCall.Parameters)
                    writer.WriteAmfItem(encoding, arg);
            }
            else if (isInvoke)
            {
                // write the result
                if (!methodCall.IsSuccess)
                    methodCall.Parameters = new object[] { new StatusAsObject(StatusCode.CallFailed, "error", "Call failed.") };
                writer.WriteAmfItem(encoding, methodCall.Parameters);
            }
        }
示例#41
0
		public DataOutput(AMFWriter amfWriter) {
			_amfWriter = amfWriter;
			_objectEncoding = ObjectEncoding.AMF3;
		}
示例#42
0
 public DataInput(AmfReader reader)
 {
     this.reader = reader;
     this.objectEncoding = ObjectEncoding.Amf3;
 }
 public RtmpProxySource(SerializationContext serializationContext, Stream stream) : this(serializationContext)
 {
     DoHandshake(stream);
     EstablishThreads(stream);
     objectEncoding = ObjectEncoding.Amf3;
 }
示例#44
0
 /// <summary>
 /// This method supports the Fluorine infrastructure and is not intended to be used directly from your code.
 /// </summary>
 protected virtual void WriteBodyData(ObjectEncoding objectEncoding, AMFWriter writer)
 {
     object content = this.Content;
     writer.WriteData(objectEncoding, content);
 }
示例#45
0
		public DataInput(AMFReader amfReader)
		{
			_amfReader = amfReader;
            _objectEncoding = ObjectEncoding.AMF3;
		}
示例#46
0
		/// <summary>
		/// Initializes a new instance of the ByteArray class.
		/// </summary>
        /// <param name="buffer">The array of unsigned bytes from which to create the current ByteArray.</param>
        public ByteArray(byte[] buffer)
		{
			_memoryStream = new MemoryStream();
			_memoryStream.Write(buffer, 0, buffer.Length);
			_memoryStream.Position = 0;
			AMFReader amfReader = new AMFReader(_memoryStream);
			AMFWriter amfWriter = new AMFWriter(_memoryStream);
			_dataOutput = new DataOutput(amfWriter);
			_dataInput = new DataInput(amfReader);
            _objectEncoding = ObjectEncoding.AMF3;
		}
示例#47
0
 void WriteData(AmfWriter writer, RtmpEvent o, ObjectEncoding encoding)
 {
     var command = o as Command;
     if (command.MethodCall == null)
         WriteCommandOrData(writer, o, encoding);
     else
         writer.WriteBytes(command.Buffer);
 }
示例#48
0
        /// <summary>
        /// Initializes a new instance of the RtmpContext class.
        /// </summary>
        /// <param name="mode"></param>
        public RtmpContext(RtmpMode mode)
		{
			//_mode = mode;
            _readerWriterLock = new FastReaderWriterLock();
            SetMode(mode);
			_objectEncoding = ObjectEncoding.AMF0;
		}
示例#49
0
        internal void WriteBody(ObjectEncoding objectEncoding, AMFWriter writer)
        {
            writer.Reset();
            if (this.Target == null)
                writer.WriteUTF("null");
            else
                writer.WriteUTF(this.Target);

            if (this.Response == null)
                writer.WriteUTF("null");
            else
                writer.WriteUTF(this.Response);
            writer.WriteInt32(-1);

            WriteBodyData(objectEncoding, writer);
        }
		private void WriteHeader(AMFHeader header, ObjectEncoding objectEncoding)
		{
			base.Reset();
			base.WriteUTF(header.Name);
			base.WriteBoolean(header.MustUnderstand);
			base.WriteInt32(-1);
			base.WriteData(objectEncoding, header.Content);
		}