public void Send(ClusterMessageType type, object message)
        {
            var v = Variant.Get(message);

            Send(type, output => output.Write(v.ToBytes()));
            v.Recycle();
        }
 protected override void OnReceive(ClusterMessageType type)
 {
     string streamName;
     uint appId;
     StreamsManager streamManager;
     switch (type)
     {
         case ClusterMessageType.GetAppId:
             var appName = InputBuffer.Reader.ReadString();
             ClientApplicationManager.GetOrCreateRoom(appName);//创建房间自动广播appId
             break;
         case ClusterMessageType.Publish:
            
             appId = InputBuffer.Reader.Read7BitValue();
             streamName = InputBuffer.Reader.ReadString();
             var streamType = InputBuffer.Reader.ReadUInt64();
             var streamId = InputBuffer.Reader.Read7BitValue();
             var chunkSize = InputBuffer.Reader.Read7BitValue();
             var publishType = InputBuffer.Reader.ReadString();
             
             streamManager = GetRoom(appId).StreamsManager;
             var getWaitings = streamManager.GetWaitingSubscribers(streamName, streamType);
             var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
             InStreams[streamId] = inStream;
             foreach (var pBaseOutStream in getWaitings)
             {
                 pBaseOutStream.Link(inStream);
             }
             if (publishType == "append" || publishType == "record")
             {
                 streamManager.CreateOutFileStream(this, inStream, publishType == "append");
             }
             Application.GetProtocolHandler<BaseClusterAppProtocolHandler>().PublishStream(appId, inStream, publishType);
             break;
         case ClusterMessageType.NoSubscriber:
             appId = InputBuffer.Reader.Read7BitValue();
             streamName = InputBuffer.Reader.ReadString();
             streamManager = GetRoom(appId).StreamsManager;
             foreach (var streams in streamManager.FindByTypeByName(StreamTypes.ST_OUT_NET_CLUSTER, streamName, false, false).Values)
             {
                 streams.Dispose();
             }
             break;
         case ClusterMessageType.Play:
             appId = InputBuffer.Reader.Read7BitValue();
             streamName = InputBuffer.Reader.ReadString();
             streamManager = GetRoom(appId).StreamsManager;
             Logger.INFO(appId+":Play:"+streamName);
             foreach (var streams in streamManager.FindByTypeByName(StreamTypes.ST_IN, streamName, true, false).Values)
             {
                 PublishStream(appId, streams as IInStream);
             }
             break;
         default:
             base.OnReceive(type);
             break;
     }
 }
 public void Send(ClusterMessageType type, uint streamId, Stream pData, uint dataLength, uint processedLength, uint totalLength, uint absoluteTimestamp)
 {
     Send(type, output =>
     {
         output.Write7BitValue(streamId);
         output.Write7BitValue(dataLength);
         output.Write7BitValue(processedLength);
         output.Write7BitValue(totalLength);
         output.Write7BitValue(absoluteTimestamp);
         pData.CopyDataTo(output.BaseStream, (int)dataLength);
     });
 }
Exemplo n.º 4
0
 public void Send(ClusterMessageType type, uint streamId, Stream pData, uint dataLength, uint processedLength, uint totalLength, uint absoluteTimestamp)
 {
     Send(type, output =>
     {
         output.Write7BitValue(streamId);
         output.Write7BitValue(dataLength);
         output.Write7BitValue(processedLength);
         output.Write7BitValue(totalLength);
         output.Write7BitValue(absoluteTimestamp);
         pData.CopyDataTo(output.BaseStream, (int)dataLength);
     });
 }
Exemplo n.º 5
0
 public void Send(ClusterMessageType type,Action<H2NBinaryWriter> writeAction)
 {
     var ms = Utils.Rms.GetStream();
     using (var writer = new H2NBinaryWriter(ms))
     {
         writer.Write((byte)type);
         writer.Write((ushort)0);
         writeAction(writer);
         var length = ms.Length - 3;
         ms.Position = 1;
         writer.Write((ushort)length);
         EnqueueForOutbound(ms);
     }
 }
        public void Send(ClusterMessageType type, Action <H2NBinaryWriter> writeAction)
        {
            var ms = Utils.Rms.GetStream();

            using (var writer = new H2NBinaryWriter(ms))
            {
                writer.Write((byte)type);
                writer.Write((ushort)0);
                writeAction(writer);
                var length = ms.Length - 3;
                ms.Position = 1;
                writer.Write((ushort)length);
                EnqueueForOutbound(ms);
            }
        }
Exemplo n.º 7
0
        protected override void OnReceive(ClusterMessageType type)
        {
            switch (type)
            {
            case ClusterMessageType.Publish:
                var appId      = InputBuffer.Reader.Read7BitValue();
                var streamName = InputBuffer.Reader.ReadString();
                Logger.INFO(appId + ":Publish:" + streamName);
                var streamType    = InputBuffer.Reader.ReadUInt64();
                var streamId      = InputBuffer.Reader.Read7BitValue();
                var chunkSize     = InputBuffer.Reader.Read7BitValue();
                var publishType   = InputBuffer.Reader.ReadString();
                var streamManager = GetRoom(appId).StreamsManager;
                var getWaitings   = streamManager.GetWaitingSubscribers(streamName, streamType).ToArray();
                if (getWaitings.Length > 0)
                {
                    var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
                    InStreams[streamId] = inStream;
                    foreach (var pBaseOutStream in getWaitings)
                    {
                        pBaseOutStream.Link(inStream);
                    }
                }
                else
                {
                    if (publishType == "append" || publishType == "record")
                    {
                        var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
                        InStreams[streamId] = inStream;
                        streamManager.CreateOutFileStream(this, inStream, publishType == "append");
                    }
                    else
                    {
                        Send(ClusterMessageType.NoSubscriber, o =>
                        {
                            o.Write7BitValue(appId);
                            o.Write(streamName);
                        });
                    }
                }
                break;

            default:
                base.OnReceive(type);
                break;
            }
        }
 protected override void OnReceive(ClusterMessageType type)
 {
     switch (type)
     {
         case ClusterMessageType.Publish:
             var appId = InputBuffer.Reader.Read7BitValue();
             var streamName = InputBuffer.Reader.ReadString();
             Logger.INFO(appId + ":Publish:" + streamName);
             var streamType = InputBuffer.Reader.ReadUInt64();
             var streamId = InputBuffer.Reader.Read7BitValue();
             var chunkSize = InputBuffer.Reader.Read7BitValue();
             var publishType = InputBuffer.Reader.ReadString();
             var streamManager = GetRoom(appId).StreamsManager;
             var getWaitings = streamManager.GetWaitingSubscribers(streamName, streamType).ToArray();
             if (getWaitings.Length>0)
             {
                 var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
                 InStreams[streamId] = inStream;
                 foreach (var pBaseOutStream in getWaitings)
                 {
                     pBaseOutStream.Link(inStream);
                 }
             }
             else
             {
                 if (publishType == "append" || publishType == "record")
                 {
                     var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
                     InStreams[streamId] = inStream;
                     streamManager.CreateOutFileStream(this, inStream, publishType == "append");
                 }
                 else
                     Send(ClusterMessageType.NoSubscriber, o =>
                     {
                         o.Write7BitValue(appId);
                         o.Write(streamName);
                     });
             }
             break;
         default:
             base.OnReceive(type);
             break;
     }
 }
 public override bool SignalInputData(int recAmount)
 {
     do
     {
         if (_waitlength == 0)
         {
             _currentType = (ClusterMessageType)InputBuffer.ReadByte();
             _waitlength  = InputBuffer.Reader.ReadUInt16();
         }
         if (InputBuffer.AvaliableByteCounts >= _waitlength)
         {
             var pos = InputBuffer.Position;
             OnReceive(_currentType);
             if (pos + _waitlength != InputBuffer.Position)
             {
                 InputBuffer.Ignore((uint)(_waitlength + pos - InputBuffer.Position));
             }
             _waitlength = 0;
         }
     } while (_waitlength == 0 && InputBuffer.AvaliableByteCounts > 2);
     return(true);
 }
Exemplo n.º 10
0
 public void Send(ClusterMessageType type, InputStream message)
 {
     Send(type, output => message.CopyDataTo(output.BaseStream));
 }
Exemplo n.º 11
0
 public void Send(ClusterMessageType type, object message)
 {
     var v = Variant.Get(message);
     Send(type, output => output.Write(v.ToBytes()));
     v.Recycle();
 }
Exemplo n.º 12
0
 public void Send(ClusterMessageType type)
 {
     Send(type, output => { });
 }
Exemplo n.º 13
0
 public void Send(ClusterMessageType type)
 {
     Send(type, output => { });
 }
Exemplo n.º 14
0
        protected virtual void OnReceive(ClusterMessageType type)
        {
            uint streamId;
            string roomName=null;
            Variant message;
            uint appId;
            switch (type)
            {
                case ClusterMessageType.SharedObjectTrack:
                    appId = InputBuffer.Reader.Read7BitValue();
                    var soName = InputBuffer.Reader.ReadString();
                    var version = InputBuffer.Reader.Read7BitValue();
                    var isPersistent = InputBuffer.Reader.ReadBoolean();
                    message = Deserialize();
                   
                    Logger.INFO("SharedObjectTrack:{0},{1}", appId, soName);
                    GetRoom(appId).SOManager.Process(this, soName, isPersistent, message);
                    break;
                case ClusterMessageType.BroadCast:

                    appId = InputBuffer.Reader.Read7BitValue();
                    message = Deserialize();
                    Logger.INFO("ReceiveBroadcast from {1}:{0}", message, appId);
                    GetRoom(appId).Broadcast(this, message);
                    break;
                case ClusterMessageType.Call:
                    appId = InputBuffer.Reader.Read7BitValue();
                    var functionName = InputBuffer.Reader.ReadString();
                    message = Deserialize();
                    GetRoom(appId).CallFunction(functionName, this, message);
                    break;
                case ClusterMessageType.Audio:
                    FeedData(true);
                    break;
                case ClusterMessageType.Video:
                    FeedData(false);
                    break;
                case ClusterMessageType.StopPublish:
                    streamId = InputBuffer.Reader.Read7BitValue();
                    Logger.INFO("StopPublish:" + streamId);
                    if (InStreams.ContainsKey(streamId))
                    {
                        InStreams[streamId].Dispose();
                        InStreams.Remove(streamId);
                    }
                    break;
                case ClusterMessageType.StreamMessage:
                    streamId = InputBuffer.Reader.Read7BitValue();
                    var length = (int)InputBuffer.Reader.Read7BitValue();
                    var buffer = new byte[length];
                    InputBuffer.Reader.Read(buffer, 0, length);
                    //message = Deserialize();
                    if (InStreams.ContainsKey(streamId))
                    {
                        InStreams[streamId].SendStreamMessage(new BufferWithOffset(buffer));
                    }
                    break;
                case ClusterMessageType.Unknow:
                    Logger.WARN("Unknow Type!");
                    break;
                default:
                    Logger.WARN("Unknow Type :"+type);
                    break;
            }
        }
Exemplo n.º 15
0
 public override bool SignalInputData(int recAmount)
 {
     do
     {
         if (_waitlength == 0)
         {
             _currentType = (ClusterMessageType) InputBuffer.ReadByte();
             _waitlength = InputBuffer.Reader.ReadUInt16();
         }
         if (InputBuffer.AvaliableByteCounts >= _waitlength)
         {
             var pos = InputBuffer.Position;
             OnReceive(_currentType);
             if (pos + _waitlength != InputBuffer.Position)
                 InputBuffer.Ignore((uint) (_waitlength + pos - InputBuffer.Position));
             _waitlength = 0;
         }
     } while (_waitlength == 0 && InputBuffer.AvaliableByteCounts > 2);
     return true;
 }
Exemplo n.º 16
0
 public void Send(ClusterMessageType type, InputStream message)
 {
     Send(type, output => message.CopyDataTo(output.BaseStream));
 }
Exemplo n.º 17
0
        protected virtual void OnReceive(ClusterMessageType type)
        {
            uint    streamId;
            string  roomName = null;
            Variant message;
            uint    appId;

            switch (type)
            {
            case ClusterMessageType.SharedObjectTrack:
                appId = InputBuffer.Reader.Read7BitValue();
                var soName       = InputBuffer.Reader.ReadString();
                var version      = InputBuffer.Reader.Read7BitValue();
                var isPersistent = InputBuffer.Reader.ReadBoolean();
                message = Deserialize();

                Logger.INFO("SharedObjectTrack:{0},{1}", appId, soName);
                GetRoom(appId).SOManager.Process(this, soName, isPersistent, message);
                break;

            case ClusterMessageType.BroadCast:

                appId   = InputBuffer.Reader.Read7BitValue();
                message = Deserialize();
                Logger.INFO("ReceiveBroadcast from {1}:{0}", message, appId);
                GetRoom(appId).Broadcast(this, message);
                break;

            case ClusterMessageType.Call:
                appId = InputBuffer.Reader.Read7BitValue();
                var functionName = InputBuffer.Reader.ReadString();
                message = Deserialize();
                GetRoom(appId).CallFunction(functionName, this, message);
                break;

            case ClusterMessageType.Audio:
                FeedData(true);
                break;

            case ClusterMessageType.Video:
                FeedData(false);
                break;

            case ClusterMessageType.StopPublish:
                streamId = InputBuffer.Reader.Read7BitValue();
                Logger.INFO("StopPublish:" + streamId);
                if (InStreams.ContainsKey(streamId))
                {
                    InStreams[streamId].Dispose();
                    InStreams.Remove(streamId);
                }
                break;

            case ClusterMessageType.StreamMessage:
                streamId = InputBuffer.Reader.Read7BitValue();
                var length = (int)InputBuffer.Reader.Read7BitValue();
                var buffer = new byte[length];
                InputBuffer.Reader.Read(buffer, 0, length);
                //message = Deserialize();
                if (InStreams.ContainsKey(streamId))
                {
                    InStreams[streamId].SendStreamMessage(new BufferWithOffset(buffer));
                }
                break;

            case ClusterMessageType.Unknow:
                Logger.WARN("Unknow Type!");
                break;

            default:
                Logger.WARN("Unknow Type :" + type);
                break;
            }
        }
Exemplo n.º 18
0
        protected override void OnReceive(ClusterMessageType type)
        {
            string         streamName;
            uint           appId;
            StreamsManager streamManager;

            switch (type)
            {
            case ClusterMessageType.GetAppId:
                var appName = InputBuffer.Reader.ReadString();
                ClientApplicationManager.GetOrCreateRoom(appName);    //创建房间自动广播appId
                break;

            case ClusterMessageType.Publish:

                appId      = InputBuffer.Reader.Read7BitValue();
                streamName = InputBuffer.Reader.ReadString();
                var streamType  = InputBuffer.Reader.ReadUInt64();
                var streamId    = InputBuffer.Reader.Read7BitValue();
                var chunkSize   = InputBuffer.Reader.Read7BitValue();
                var publishType = InputBuffer.Reader.ReadString();

                streamManager = GetRoom(appId).StreamsManager;
                var getWaitings = streamManager.GetWaitingSubscribers(streamName, streamType);
                var inStream    = new InClusterStream(appId, this, streamName, streamType, chunkSize);
                InStreams[streamId] = inStream;
                foreach (var pBaseOutStream in getWaitings)
                {
                    pBaseOutStream.Link(inStream);
                }
                if (publishType == "append" || publishType == "record")
                {
                    streamManager.CreateOutFileStream(this, inStream, publishType == "append");
                }
                Application.GetProtocolHandler <BaseClusterAppProtocolHandler>().PublishStream(appId, inStream, publishType);
                break;

            case ClusterMessageType.NoSubscriber:
                appId         = InputBuffer.Reader.Read7BitValue();
                streamName    = InputBuffer.Reader.ReadString();
                streamManager = GetRoom(appId).StreamsManager;
                foreach (var streams in streamManager.FindByTypeByName(StreamTypes.ST_OUT_NET_CLUSTER, streamName, false, false).Values)
                {
                    streams.Dispose();
                }
                break;

            case ClusterMessageType.Play:
                appId         = InputBuffer.Reader.Read7BitValue();
                streamName    = InputBuffer.Reader.ReadString();
                streamManager = GetRoom(appId).StreamsManager;
                Logger.INFO(appId + ":Play:" + streamName);
                foreach (var streams in streamManager.FindByTypeByName(StreamTypes.ST_IN, streamName, true, false).Values)
                {
                    PublishStream(appId, streams as IInStream);
                }
                break;

            default:
                base.OnReceive(type);
                break;
            }
        }