Skip to content

Commit d8f5026

Browse files
Merge pull request #30 from pollen-robotics/29-signal-when-data-command-channel-is-opened
enhancement #29: emit signal when command channel is opened.
2 parents fa20719 + 73ef2a9 commit d8f5026

File tree

5 files changed

+45
-11
lines changed

5 files changed

+45
-11
lines changed

Plugin/src/GstDataPipeline.cpp

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ void GstDataPipeline::DestroyPipeline()
2828
gst_webrtc_data_channel_close(channel_command_);
2929
gst_webrtc_data_channel_close(channel_audit_);
3030

31+
channel_service_ = nullptr;
32+
channel_audit_ = nullptr;
33+
channel_command_ = nullptr;
34+
3135
GstBasePipeline::DestroyPipeline();
3236
}
3337

@@ -186,10 +190,10 @@ void GstDataPipeline::on_data_channel(GstElement* webrtcbin, GstWebRTCDataChanne
186190

187191
g_signal_connect(channel, "on-message-data", G_CALLBACK(on_message_data_service), nullptr);
188192

189-
if (callbackChannelServiceOpenInstance != nullptr)
190-
{
191-
callbackChannelServiceOpenInstance();
192-
}
193+
if (callbackChannelServiceOpenInstance != nullptr)
194+
callbackChannelServiceOpenInstance();
195+
else
196+
Debug::Log("Fails to notify opening of service channel", Level::Warning);
193197
}
194198
else if (starts_with(label_str,CHANNEL_REACHY_STATE))
195199
{
@@ -202,6 +206,10 @@ void GstDataPipeline::on_data_channel(GstElement* webrtcbin, GstWebRTCDataChanne
202206
else if (starts_with(label_str, CHANNEL_REACHY_COMMAND))
203207
{
204208
self->channel_command_ = channel;
209+
if (callbackChannelCommandOpenInstance != nullptr)
210+
callbackChannelCommandOpenInstance();
211+
else
212+
Debug::Log("Fails to notify opening of command channel", Level::Warning);
205213
}
206214
else
207215
{
@@ -290,7 +298,8 @@ GstElement* GstDataPipeline::add_webrtcbin()
290298
// Create a callback delegate
291299
void RegisterICECallback(FuncCallBackICE cb) { callbackICEInstance = cb; }
292300
void RegisterSDPCallback(FuncCallBackSDP cb) { callbackSDPInstance = cb; }
293-
void RegisterChannelServiceOpenCallback(FuncCallBackChannelServiceOpen cb) { callbackChannelServiceOpenInstance = cb; }
301+
void RegisterChannelCommandOpenCallback(FuncCallBackChannelOpen cb) { callbackChannelCommandOpenInstance = cb; }
302+
void RegisterChannelServiceOpenCallback(FuncCallBackChannelOpen cb) { callbackChannelServiceOpenInstance = cb; }
294303
void RegisterChannelServiceDataCallback(FuncCallBackChannelData cb) { callbackChannelServiceDataInstance = cb; }
295304
void RegisterChannelStateDataCallback(FuncCallBackChannelData cb) { callbackChannelStateDataInstance = cb; }
296305
void RegisterChannelAuditDataCallback(FuncCallBackChannelData cb) { callbackChannelAuditDataInstance = cb; }

Plugin/src/GstDataPipeline.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@ extern "C"
2121
static FuncCallBackSDP callbackSDPInstance = nullptr;
2222
DLLExport void RegisterSDPCallback(FuncCallBackSDP cb);
2323

24-
typedef void (*FuncCallBackChannelServiceOpen)();
25-
static FuncCallBackChannelServiceOpen callbackChannelServiceOpenInstance = nullptr;
26-
DLLExport void RegisterChannelServiceOpenCallback(FuncCallBackChannelServiceOpen cb);
24+
typedef void (*FuncCallBackChannelOpen)();
25+
static FuncCallBackChannelOpen callbackChannelServiceOpenInstance = nullptr;
26+
DLLExport void RegisterChannelServiceOpenCallback(FuncCallBackChannelOpen cb);
27+
28+
static FuncCallBackChannelOpen callbackChannelCommandOpenInstance = nullptr;
29+
DLLExport void RegisterChannelCommandOpenCallback(FuncCallBackChannelOpen cb);
2730

2831
typedef void (*FuncCallBackChannelData)(const uint8_t * message, int size);
2932
static FuncCallBackChannelData callbackChannelServiceDataInstance = nullptr;
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:16fd1d25ac7fe2b2c49020fe60f09464654f0f50299e18926410074420dbbd35
2+
oid sha256:704f9ac33cae4bcf5a8f354a9e81ed4437d60904352b37d67feb1ad00f638ac5
33
size 53248

UnityProject/Packages/com.pollenrobotics.gstreamerwebrtc/Runtime/Scripts/GStreamerDataPlugin.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ public class GStreamerDataPlugin
8080
static extern void RegisterChannelServiceOpenCallback(channelServiceOpenCallback cb);
8181
delegate void channelServiceOpenCallback();
8282

83+
#if (PLATFORM_IOS || PLATFORM_TVOS || PLATFORM_BRATWURST || PLATFORM_SWITCH) && !UNITY_EDITOR
84+
[DllImport("__Internal")]
85+
#else
86+
[DllImport("UnityGStreamerPlugin")]
87+
#endif
88+
static extern void RegisterChannelCommandOpenCallback(channelCommandOpenCallback cb);
89+
delegate void channelCommandOpenCallback();
90+
8391
#if (PLATFORM_IOS || PLATFORM_TVOS || PLATFORM_BRATWURST || PLATFORM_SWITCH) && !UNITY_EDITOR
8492
[DllImport("__Internal")]
8593
#else
@@ -116,6 +124,7 @@ public class GStreamerDataPlugin
116124

117125
private static UnityEvent<string, int> event_OnICE;
118126
public static UnityEvent event_OnChannelServiceOpen;
127+
public static UnityEvent event_OnChannelCommandOpen;
119128
public static UnityEvent<byte[]> event_OnChannelServiceData;
120129
public static UnityEvent<byte[]> event_OnChannelStateData;
121130
public static UnityEvent<byte[]> event_OnChannelAuditData;
@@ -130,6 +139,7 @@ public GStreamerDataPlugin(string ip_address)
130139
RegisterICECallback(OnICECallback);
131140
RegisterSDPCallback(OnSDPCallback);
132141
RegisterChannelServiceOpenCallback(OnChannelServiceOpenCallback);
142+
RegisterChannelCommandOpenCallback(OnChannelCommandOpenCallback);
133143
RegisterChannelServiceDataCallback(OnChannelServiceDataCallback);
134144
RegisterChannelStateDataCallback(OnChannelStateDataCallback);
135145
RegisterChannelAuditDataCallback(OnChannelAuditDataCallback);
@@ -152,6 +162,7 @@ public GStreamerDataPlugin(string ip_address)
152162
event_OnICE.AddListener(OnICE);
153163

154164
event_OnChannelServiceOpen = new UnityEvent();
165+
event_OnChannelCommandOpen = new UnityEvent();
155166
event_OnChannelServiceData = new UnityEvent<byte[]>();
156167
event_OnChannelStateData = new UnityEvent<byte[]>();
157168
event_OnChannelAuditData = new UnityEvent<byte[]>();
@@ -226,6 +237,12 @@ static void OnChannelServiceOpenCallback()
226237
event_OnChannelServiceOpen.Invoke();
227238
}
228239

240+
[MonoPInvokeCallback(typeof(channelCommandOpenCallback))]
241+
static void OnChannelCommandOpenCallback()
242+
{
243+
event_OnChannelCommandOpen.Invoke();
244+
}
245+
229246
[MonoPInvokeCallback(typeof(channelServiceDataCallback))]
230247
static void OnChannelServiceDataCallback(IntPtr data, int size)
231248
{
@@ -251,4 +268,4 @@ static void OnChannelAuditDataCallback(IntPtr data, int size)
251268
}
252269

253270
}
254-
}
271+
}

UnityProject/Packages/com.pollenrobotics.gstreamerwebrtc/Runtime/Scripts/GstreamerPlugin.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ void Update()
114114
renderingPlugin.Render();
115115
}
116116

117+
protected virtual void OnChannelCommandOpen()
118+
{
119+
Debug.Log("Channel command open");
120+
}
121+
117122
//Data channels
118123
protected virtual void OnChannelServiceOpen()
119124
{
@@ -133,4 +138,4 @@ protected void SendCommandToChannel(byte[] commands)
133138
GStreamerDataPlugin.SendBytesChannelCommand(commands, commands.Length);
134139
}
135140
}
136-
}
141+
}

0 commit comments

Comments
 (0)