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; } } }
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; } } }
/// <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); }
/// <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); }