Index: webrtc/examples/unityplugin/unity_plugin_apis.cc |
diff --git a/webrtc/examples/unityplugin/unity_plugin_apis.cc b/webrtc/examples/unityplugin/unity_plugin_apis.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d7f40c39f4dcf099cae7da7c0dcc6711a6a0a6dc |
--- /dev/null |
+++ b/webrtc/examples/unityplugin/unity_plugin_apis.cc |
@@ -0,0 +1,187 @@ |
+/* |
+ * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved. |
+ * |
+ * Use of this source code is governed by a BSD-style license |
+ * that can be found in the LICENSE file in the root of the source |
+ * tree. An additional intellectual property rights grant can be found |
+ * in the file PATENTS. All contributing project authors may |
+ * be found in the AUTHORS file in the root of the source tree. |
+ */ |
+ |
+#include "webrtc/examples/unityplugin/unity_plugin_apis.h" |
+ |
+#include <map> |
+#include <string> |
+ |
+#include "webrtc/examples/unityplugin/simple_peer_connection.h" |
+ |
+namespace { |
+static int g_peer_connection_id = 1; |
+static std::map<int, rtc::scoped_refptr<SimplePeerConnection>> |
+ g_SimplePeerConnection_map; |
lliuu
2017/04/25 01:56:43
I think the notation style should be something lik
GeorgeZ
2017/04/25 23:52:45
Done.
|
+} // namespace |
+ |
+int CreatePeerConnection() { |
+ g_SimplePeerConnection_map[g_peer_connection_id] = |
+ new rtc::RefCountedObject<SimplePeerConnection>(); |
+ |
+ if (!g_SimplePeerConnection_map[g_peer_connection_id] |
+ ->InitializePeerConnection(false)) |
+ return -1; |
+ |
+ return g_peer_connection_id++; |
+} |
+ |
+bool ClosePeerConnection(int peer_connection_id) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id]->DeletePeerConnection(); |
+ g_SimplePeerConnection_map.erase(peer_connection_id); |
+ return true; |
+} |
+ |
+bool AddStream(int peer_connection_id, bool audio_only) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id]->AddStreams(audio_only); |
+ return true; |
+} |
+ |
+bool AddDataChannel(int peer_connection_id) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ return g_SimplePeerConnection_map[peer_connection_id]->CreateDataChannel(); |
+} |
+ |
+bool CreateOffer(int peer_connection_id) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ return g_SimplePeerConnection_map[peer_connection_id]->CreateOffer(); |
+} |
+ |
+bool CreateAnswer(int peer_connection_id) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ return g_SimplePeerConnection_map[peer_connection_id]->CreateAnswer(); |
+} |
+ |
+bool SendDataViaDataChannel(int peer_connection_id, const char* data) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ std::string s(data); |
+ g_SimplePeerConnection_map[peer_connection_id]->SendDataViaDataChannel(s); |
+ |
+ return true; |
+} |
+ |
+bool SetAudioControl(int peer_connection_id, bool is_mute, bool is_record) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id]->SetAudioControl(is_mute, |
+ is_record); |
+ return true; |
+} |
+ |
+// Register callback functions. |
+bool RegisterOnVideoFramReady(int peer_connection_id, |
+ VIDEOFRAMEREADY_CALLBACK callback) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id]->RegisterOnVideoFramReady( |
+ callback); |
+ return true; |
+} |
+ |
+bool RegisterOnLocalDataChannelReady(int peer_connection_id, |
+ LOCALDATACHANNELREADY_CALLBACK callback) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id] |
+ ->RegisterOnLocalDataChannelReady(callback); |
+ return true; |
+} |
+ |
+bool RegisterOnDataFromDataChannelReady( |
+ int peer_connection_id, |
+ DATAFROMEDATECHANNELREADY_CALLBACK callback) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id] |
+ ->RegisterOnDataFromDataChannelReady(callback); |
+ return true; |
+} |
+ |
+bool RegisterOnFailure(int peer_connection_id, FAILURE_CALLBACK callback) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id]->RegisterOnFailure(callback); |
+ return true; |
+} |
+ |
+bool RegisterOnAudioBusReady(int peer_connection_id, |
+ AUDIOBUSREADY_CALLBACK callback) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id]->RegisterOnAudioBusReady( |
+ callback); |
+ return true; |
+} |
+ |
+// Singnaling channel related functions. |
+bool RegisterOnLocalSdpReadytoSend(int peer_connection_id, |
+ LOCALSDPREADYTOSEND_CALLBACK callback) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id]->RegisterOnLocalSdpReadytoSend( |
+ callback); |
+ return true; |
+} |
+ |
+bool RegisterOnIceCandiateReadytoSend( |
+ int peer_connection_id, |
+ ICECANDIDATEREADYTOSEND_CALLBACK callback) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ g_SimplePeerConnection_map[peer_connection_id] |
+ ->RegisterOnIceCandiateReadytoSend(callback); |
+ return true; |
+} |
+ |
+int ReceivedSdp(int peer_connection_id, const char* sdp) { |
+ // Create a SimplePeerConnection if no one exists. |
+ int id = -1; |
+ if (g_SimplePeerConnection_map.count(peer_connection_id)) { |
+ id = peer_connection_id; |
+ } else { |
+ id = g_peer_connection_id++; |
+ g_SimplePeerConnection_map[id] = |
+ new rtc::RefCountedObject<SimplePeerConnection>(); |
+ if (!g_SimplePeerConnection_map[id]->InitializePeerConnection(true)) |
+ return -1; |
+ } |
+ |
+ g_SimplePeerConnection_map[id]->ReceivedSdp(sdp); |
+ return id; |
+} |
+ |
+bool ReceivedIceCandidate(int peer_connection_id, const char* ice_candidate) { |
+ if (!g_SimplePeerConnection_map.count(peer_connection_id)) |
+ return false; |
+ |
+ return g_SimplePeerConnection_map[peer_connection_id]->ReceivedIceCandidate( |
+ ice_candidate); |
+} |