2626JNIEXPORT void JNICALL Java_dev_kastle_webrtc_PeerConnectionFactory_initialize
2727(JNIEnv * env, jobject caller)
2828{
29- try {
30- auto networkThread = webrtc::Thread::CreateWithSocketServer ();
31- networkThread->SetName (" webrtc_jni_network_thread" , nullptr );
32-
33- auto signalingThread = webrtc::Thread::Create ();
34- signalingThread->SetName (" webrtc_jni_signaling_thread" , nullptr );
35-
36- auto workerThread = webrtc::Thread::Create ();
37- workerThread->SetName (" webrtc_jni_worker_thread" , nullptr );
38-
39- if (!networkThread->Start ()) {
40- throw jni::Exception (" Start network thread failed" );
41- }
42- if (!signalingThread->Start ()) {
43- throw jni::Exception (" Start signaling thread failed" );
44- }
45- if (!workerThread->Start ()) {
46- throw jni::Exception (" Start worker thread failed" );
47- }
48-
49- webrtc::PeerConnectionFactoryDependencies dependencies;
50-
51- dependencies.network_thread = networkThread.release ();
52- dependencies.worker_thread = workerThread.release ();
53- dependencies.signaling_thread = signalingThread.release ();
54-
55- auto factory = webrtc::CreateModularPeerConnectionFactory (std::move (dependencies));
56-
57- if (factory != nullptr ) {
58- SetHandle (env, caller, factory.release ());
59- }
60- else {
61- throw jni::Exception (" Create PeerConnectionFactory failed" );
62- }
63- }
64- catch (...) {
65- ThrowCxxJavaException (env);
66- }
29+ std::unique_ptr<webrtc::Thread> networkThread = webrtc::Thread::CreateWithSocketServer ();
30+ networkThread->SetName (" webrtc_jni_network_thread" , nullptr );
31+ if (!networkThread->Start ()) {
32+ env->Throw (jni::JavaRuntimeException (env, " Start network thread failed" ));
33+ return ;
34+ }
35+
36+ std::unique_ptr<webrtc::Thread> signalingThread = webrtc::Thread::Create ();
37+ signalingThread->SetName (" webrtc_jni_signaling_thread" , nullptr );
38+ if (!signalingThread->Start ()) {
39+ env->Throw (jni::JavaRuntimeException (env, " Start signaling thread failed" ));
40+ return ;
41+ }
42+
43+ std::unique_ptr<webrtc::Thread> workerThread = webrtc::Thread::Create ();
44+ workerThread->SetName (" webrtc_jni_worker_thread" , nullptr );
45+ if (!workerThread->Start ()) {
46+ env->Throw (jni::JavaRuntimeException (env, " Start worker thread failed" ));
47+ return ;
48+ }
49+
50+ webrtc::PeerConnectionFactoryDependencies dependencies;
51+
52+ dependencies.network_thread = networkThread.release ();
53+ dependencies.worker_thread = workerThread.release ();
54+ dependencies.signaling_thread = signalingThread.release ();
55+
56+ webrtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> factory =
57+ webrtc::CreateModularPeerConnectionFactory (std::move (dependencies));
58+
59+ if (factory == nullptr ) {
60+ env->Throw (jni::JavaRuntimeException (env, " Create PeerConnectionFactory failed" ));
61+ return ;
62+ }
63+
64+ SetHandle (env, caller, factory.release ());
6765}
6866
6967JNIEXPORT void JNICALL Java_dev_kastle_webrtc_PeerConnectionFactory_dispose
@@ -72,37 +70,31 @@ JNIEXPORT void JNICALL Java_dev_kastle_webrtc_PeerConnectionFactory_dispose
7270 webrtc::PeerConnectionFactoryInterface * factory = GetHandle<webrtc::PeerConnectionFactoryInterface>(env, caller);
7371 CHECK_HANDLE (factory);
7472
75- webrtc::Thread * networkThread = GetHandle<webrtc::Thread>(env, caller, " networkThreadHandle" );
76- webrtc::Thread * signalingThread = GetHandle<webrtc::Thread>(env, caller, " signalingThreadHandle" );
77- webrtc::Thread * workerThread = GetHandle<webrtc::Thread>(env, caller, " workerThreadHandle" );
73+ std::unique_ptr< webrtc::Thread> networkThread ( GetHandle<webrtc::Thread>(env, caller, " networkThreadHandle" ) );
74+ std::unique_ptr< webrtc::Thread> signalingThread ( GetHandle<webrtc::Thread>(env, caller, " signalingThreadHandle" ) );
75+ std::unique_ptr< webrtc::Thread> workerThread ( GetHandle<webrtc::Thread>(env, caller, " workerThreadHandle" ) );
7876
7977 webrtc::RefCountReleaseStatus status = factory->Release ();
8078
8179 if (status != webrtc::RefCountReleaseStatus::kDroppedLastRef ) {
82- env->Throw (jni::JavaError (env, " Native object was not deleted. A reference is still around somewhere." ));
80+ env->Throw (jni::JavaError (
81+ env,
82+ " Native object was not deleted. A reference is still around somewhere."
83+ ));
8384 }
8485
8586 SetHandle<std::nullptr_t >(env, caller, nullptr );
86-
8787 factory = nullptr ;
8888
89- try {
90- if (networkThread) {
91- networkThread->Stop ();
92- delete networkThread;
93- }
94- if (signalingThread) {
95- signalingThread->Stop ();
96- delete signalingThread;
97- }
98- if (workerThread) {
99- workerThread->Stop ();
100- delete workerThread;
101- }
102- }
103- catch (...) {
104- ThrowCxxJavaException (env);
105- }
89+ if (networkThread) {
90+ networkThread->Stop ();
91+ }
92+ if (signalingThread) {
93+ signalingThread->Stop ();
94+ }
95+ if (workerThread) {
96+ workerThread->Stop ();
97+ }
10698}
10799
108100JNIEXPORT jobject JNICALL Java_dev_kastle_webrtc_PeerConnectionFactory_createPeerConnection
@@ -117,14 +109,20 @@ JNIEXPORT jobject JNICALL Java_dev_kastle_webrtc_PeerConnectionFactory_createPee
117109 return nullptr ;
118110 }
119111
120- webrtc::PeerConnectionFactoryInterface * factory = GetHandle<webrtc::PeerConnectionFactoryInterface>(env, caller);
112+ webrtc::PeerConnectionFactoryInterface * factory =
113+ GetHandle<webrtc::PeerConnectionFactoryInterface>(env, caller);
121114 CHECK_HANDLEV (factory, nullptr );
122115
123- webrtc::PeerConnectionInterface::RTCConfiguration configuration = jni::RTCConfiguration::toNative (env, jni::JavaLocalRef<jobject>(env, jConfig));
124- webrtc::PeerConnectionObserver * observer = new jni::PeerConnectionObserver (env, jni::JavaGlobalRef<jobject>(env, jobserver));
116+ webrtc::PeerConnectionInterface::RTCConfiguration configuration =
117+ jni::RTCConfiguration::toNative (env, jni::JavaLocalRef<jobject>(env, jConfig));
118+
119+ webrtc::PeerConnectionObserver * observer =
120+ new jni::PeerConnectionObserver (env, jni::JavaGlobalRef<jobject>(env, jobserver));
121+
125122 webrtc::PeerConnectionDependencies dependencies (observer);
126123
127- auto result = factory->CreatePeerConnectionOrError (configuration, std::move (dependencies));
124+ webrtc::RTCErrorOr<webrtc::scoped_refptr<webrtc::PeerConnectionInterface>> result =
125+ factory->CreatePeerConnectionOrError (configuration, std::move (dependencies));
128126
129127 if (!result.ok ()) {
130128 env->Throw (jni::JavaRuntimeException (env, " Create PeerConnection failed: %s %s" ,
@@ -133,13 +131,12 @@ JNIEXPORT jobject JNICALL Java_dev_kastle_webrtc_PeerConnectionFactory_createPee
133131 return nullptr ;
134132 }
135133
136- auto pc = result.MoveValue ();
134+ webrtc::scoped_refptr<webrtc::PeerConnectionInterface> pc = result.MoveValue ();
137135
138136 if (pc != nullptr ) {
139- auto javaPeerConnection = jni::JavaFactories::create (env, pc. release ());
140-
137+ jni::JavaLocalRef<jobject> javaPeerConnection =
138+ jni::JavaFactories::create (env, pc. release ());
141139 SetHandle (env, javaPeerConnection.get (), " observerHandle" , observer);
142-
143140 return javaPeerConnection.release ();
144141 }
145142
0 commit comments