Esempio n. 1
0
        private void OnPayloadChannelMessage(string targetId, string @event, NotifyData notifyData, ArraySegment <byte> payload)
        {
            if (targetId != Internal.TransportId)
            {
                return;
            }

            switch (@event)
            {
            case "rtcp":
            {
                // TODO: (alby) _closed 的使用及线程安全。
                if (Closed)
                {
                    break;
                }

                Emit("rtcp", payload);

                break;
            }

            default:
            {
                _logger.LogError($"Ignoring unknown event \"{@event}\"");
                break;
            }
            }
        }
Esempio n. 2
0
        private void OnPayloadChannelMessage(string targetId, string @event, NotifyData data, ArraySegment <byte> payload)
        {
            if (targetId != DataConsumerId)
            {
                return;
            }

            switch (@event)
            {
            case "message":
            {
                // TODO: (alby) _closed 的使用及线程安全。
                if (_closed)
                {
                    break;
                }

                var ppid    = data.PPID;
                var message = payload;

                // Emit 暂不支持超过两个参数
                Emit("message", new NotifyMessage {
                        Message = message, PPID = ppid
                    });

                break;
            }

            default:
            {
                _logger.LogError($"OnPayloadChannelMessage() | Ignoring unknown event \"{@event}\" in payload channel listener");
                break;
            }
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Send data (just valid for DataProducers created on a DirectTransport).
        /// </summary>
        /// <param name="message"></param>
        /// <param name="ppid"></param>
        /// <returns></returns>
        public Task SendAsync(string message, int?ppid)
        {
            _logger.LogDebug($"SendAsync() | DataProducer:{DataProducerId}");

            /*
             * +-------------------------------+----------+
             * | Value                         | SCTP     |
             * |                               | PPID     |
             * +-------------------------------+----------+
             * | WebRTC String                 | 51       |
             * | WebRTC Binary Partial         | 52       |
             * | (Deprecated)                  |          |
             * | WebRTC Binary                 | 53       |
             * | WebRTC String Partial         | 54       |
             * | (Deprecated)                  |          |
             * | WebRTC String Empty           | 56       |
             * | WebRTC Binary Empty           | 57       |
             * +-------------------------------+----------+
             */

            if (ppid == null)
            {
                ppid = !message.IsNullOrEmpty() ? 51 : 56;
            }

            // Ensure we honor PPIDs.
            if (ppid == 56)
            {
                message = " ";
            }

            var notifyData = new NotifyData {
                PPID = ppid.Value
            };

            _payloadChannel.Notify("dataProducer.send", _internal, notifyData, Encoding.UTF8.GetBytes(message));

            return(Task.CompletedTask);
        }
Esempio n. 4
0
        /// <summary>
        /// Send data (just valid for DataProducers created on a DirectTransport).
        /// </summary>
        /// <param name="message"></param>
        /// <param name="ppid"></param>
        /// <returns></returns>
        public Task SendAsync(byte[] message, int?ppid)
        {
            _logger.LogDebug($"SendAsync() | DataProducer:{DataProducerId}");

            if (ppid == null)
            {
                ppid = !message.IsNullOrEmpty() ? 53 : 57;
            }

            // Ensure we honor PPIDs.
            if (ppid == 57)
            {
                message = new byte[1];
            }

            var notifyData = new NotifyData {
                PPID = ppid.Value
            };

            _payloadChannel.Notify("dataProducer.send", _internal, notifyData, message);

            return(Task.CompletedTask);
        }