这是indexloc提供的服务,不要输入任何密码
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 16 additions & 22 deletions Runtime/Scripts/Room/Participant/LocalParticipant.cs
Original file line number Diff line number Diff line change
Expand Up @@ -161,28 +161,22 @@ public LocalTrackPublication UnpublishTrack(MediaStreamTrack track, bool? stopOn
public JSPromise PublishData(byte[] data, bool reliable, string[] destinationIdentities, string topic)
{
return PublishData(data, 0, data.Length, reliable, destinationIdentities, topic);
}

public JSPromise PublishData(byte[] data, int offset, int size, bool reliable, string[] destinationIdentities, string topic)
{
JSArray<string> arr = null;
if (destinationIdentities != null)
arr = new JSArray<string>(destinationIdentities);

JSNative.PushData(data, offset, size);
JSNative.PushBoolean((bool)reliable);

if (destinationIdentities == null)
JSNative.PushUndefined();
else
JSNative.PushObject(arr.NativeHandle);

if(topic == null)
JSNative.PushUndefined();
else
JSNative.PushString(topic);

return Acquire<JSPromise>(JSNative.CallMethod(NativeHandle, "publishData"));
}

public JSPromise PublishData(byte[] data, int offset, int size, bool reliable, string[] destinationIdentities, string topic)
{
var options = new PublishDataOptions
{
Reliable = reliable,
DestinationIdentities = destinationIdentities,
Topic = topic
};

JSNative.PushData(data, offset, size);
JSNative.PushStruct(JsonConvert.SerializeObject(options, JSNative.JsonSettings));

var result = JSNative.CallMethod(NativeHandle, "publishData");
return Acquire<JSPromise>(result);
}

public void SetTrackSubscriptionPermissions(bool allParticipantsAllowed,
Expand Down
13 changes: 13 additions & 0 deletions Runtime/Scripts/Room/Participant/PublishDataOptions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Newtonsoft.Json;
namespace LiveKit
{
public struct PublishDataOptions
{
[JsonProperty("reliable")]
public bool Reliable;
[JsonProperty("destinationIdentities")]
public string[] DestinationIdentities;
[JsonProperty("topic")]
public string Topic;
}
}
11 changes: 11 additions & 0 deletions Runtime/Scripts/Room/Participant/PublishDataOptions.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 10 additions & 5 deletions Runtime/Scripts/Room/Room.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public class Room : JSEventEmitter<RoomEvent>, IDisposable
public delegate void ParticipantMetadataChangedDelegate(string metadata, Participant participant);
public delegate void ActiveSpeakersChangedDelegate(JSArray<Participant> speakers);
public delegate void RoomMetadataChangedDelegate(string metadata);
public delegate void DataReceivedDelegate(byte[] data, RemoteParticipant participant, DataPacketKind? kind);
public delegate void DataReceivedDelegate(byte[] data, RemoteParticipant participant, DataPacketKind? kind, string topic);
public delegate void ConnectionQualityChangedDelegate(ConnectionQuality quality, Participant participant);
public delegate void MediaDevicesErrorDelegate(JSError error);
public delegate void TrackStreamStateChangedDelegate(RemoteTrackPublication publication, TrackStreamState streamState, RemoteParticipant participant);
Expand Down Expand Up @@ -235,10 +235,15 @@ private static void EventReceived(IntPtr iptr)
var kindPtr = JSNative.ShiftStack();
DataPacketKind? kind = null;
if (JSNative.IsNumber(kindPtr))
kind = (DataPacketKind?) JSNative.GetNumber(kindPtr);

Log.Debug($"Room: Received DataReceived({data}, {participant?.Sid}, {kind})");
room.DataReceived?.Invoke(data.ToArray(), participant, kind);
kind = (DataPacketKind?) JSNative.GetNumber(kindPtr);

var topicPtr = JSNative.ShiftStack();
string topic = null;
if (!JSNative.IsUndefined(topicPtr) && JSNative.IsString(topicPtr))
topic = JSNative.GetString(topicPtr);

Log.Debug($"Room: Received DataReceived({data}, {participant?.Sid}, {kind} {topic})");
room.DataReceived?.Invoke(data.ToArray(), participant, kind, topic);
break;
}
case RoomEvent.ConnectionQualityChanged:
Expand Down