Index: webrtc/sdk/android/src/jni/pc/datachannelobserver_jni.cc |
diff --git a/webrtc/sdk/android/src/jni/ownedfactoryandthreads.cc b/webrtc/sdk/android/src/jni/pc/datachannelobserver_jni.cc |
similarity index 18% |
copy from webrtc/sdk/android/src/jni/ownedfactoryandthreads.cc |
copy to webrtc/sdk/android/src/jni/pc/datachannelobserver_jni.cc |
index a3aa45c4bead267acec36c6862cae84a9790d792..971c300061100d8062890cdf4cec13dbbb9d0fcb 100644 |
--- a/webrtc/sdk/android/src/jni/ownedfactoryandthreads.cc |
+++ b/webrtc/sdk/android/src/jni/pc/datachannelobserver_jni.cc |
@@ -8,57 +8,58 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
-#include "webrtc/sdk/android/src/jni/ownedfactoryandthreads.h" |
+#include "webrtc/sdk/android/src/jni/pc/datachannelobserver_jni.h" |
-#include "webrtc/rtc_base/logging.h" |
#include "webrtc/sdk/android/src/jni/classreferenceholder.h" |
-#include "webrtc/sdk/android/src/jni/jni_helpers.h" |
namespace webrtc_jni { |
-PeerConnectionFactoryInterface* factoryFromJava(jlong j_p) { |
- return reinterpret_cast<OwnedFactoryAndThreads*>(j_p)->factory(); |
+// Convenience, used since callbacks occur on the signaling thread, which may |
+// be a non-Java thread. |
+static JNIEnv* jni() { |
+ return AttachCurrentThreadIfNeeded(); |
} |
-OwnedFactoryAndThreads::~OwnedFactoryAndThreads() { |
- CHECK_RELEASE(factory_); |
- if (network_monitor_factory_ != nullptr) { |
- rtc::NetworkMonitorFactory::ReleaseFactory(network_monitor_factory_); |
- } |
+DataChannelObserverJni::DataChannelObserverJni(JNIEnv* jni, jobject j_observer) |
+ : j_observer_global_(jni, j_observer), |
+ j_observer_class_(jni, GetObjectClass(jni, j_observer)), |
+ j_buffer_class_(jni, FindClass(jni, "org/webrtc/DataChannel$Buffer")), |
+ j_on_buffered_amount_change_mid_(GetMethodID(jni, |
+ *j_observer_class_, |
+ "onBufferedAmountChange", |
+ "(J)V")), |
+ j_on_state_change_mid_( |
+ GetMethodID(jni, *j_observer_class_, "onStateChange", "()V")), |
+ j_on_message_mid_(GetMethodID(jni, |
+ *j_observer_class_, |
+ "onMessage", |
+ "(Lorg/webrtc/DataChannel$Buffer;)V")), |
+ j_buffer_ctor_(GetMethodID(jni, |
+ *j_buffer_class_, |
+ "<init>", |
+ "(Ljava/nio/ByteBuffer;Z)V")) {} |
+ |
+void DataChannelObserverJni::OnBufferedAmountChange(uint64_t previous_amount) { |
+ ScopedLocalRefFrame local_ref_frame(jni()); |
+ jni()->CallVoidMethod(*j_observer_global_, j_on_buffered_amount_change_mid_, |
+ previous_amount); |
+ CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; |
} |
-void OwnedFactoryAndThreads::JavaCallbackOnFactoryThreads() { |
- JNIEnv* jni = AttachCurrentThreadIfNeeded(); |
- ScopedLocalRefFrame local_ref_frame(jni); |
- jclass j_factory_class = FindClass(jni, "org/webrtc/PeerConnectionFactory"); |
- jmethodID m = nullptr; |
- if (network_thread_->IsCurrent()) { |
- LOG(LS_INFO) << "Network thread JavaCallback"; |
- m = GetStaticMethodID(jni, j_factory_class, "onNetworkThreadReady", "()V"); |
- } |
- if (worker_thread_->IsCurrent()) { |
- LOG(LS_INFO) << "Worker thread JavaCallback"; |
- m = GetStaticMethodID(jni, j_factory_class, "onWorkerThreadReady", "()V"); |
- } |
- if (signaling_thread_->IsCurrent()) { |
- LOG(LS_INFO) << "Signaling thread JavaCallback"; |
- m = GetStaticMethodID(jni, j_factory_class, "onSignalingThreadReady", |
- "()V"); |
- } |
- if (m != nullptr) { |
- jni->CallStaticVoidMethod(j_factory_class, m); |
- CHECK_EXCEPTION(jni) << "error during JavaCallback::CallStaticVoidMethod"; |
- } |
+void DataChannelObserverJni::OnStateChange() { |
+ ScopedLocalRefFrame local_ref_frame(jni()); |
+ jni()->CallVoidMethod(*j_observer_global_, j_on_state_change_mid_); |
+ CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; |
} |
-void OwnedFactoryAndThreads::InvokeJavaCallbacksOnFactoryThreads() { |
- LOG(LS_INFO) << "InvokeJavaCallbacksOnFactoryThreads."; |
- network_thread_->Invoke<void>(RTC_FROM_HERE, |
- [this] { JavaCallbackOnFactoryThreads(); }); |
- worker_thread_->Invoke<void>(RTC_FROM_HERE, |
- [this] { JavaCallbackOnFactoryThreads(); }); |
- signaling_thread_->Invoke<void>(RTC_FROM_HERE, |
- [this] { JavaCallbackOnFactoryThreads(); }); |
+void DataChannelObserverJni::OnMessage(const webrtc::DataBuffer& buffer) { |
+ ScopedLocalRefFrame local_ref_frame(jni()); |
+ jobject byte_buffer = jni()->NewDirectByteBuffer( |
+ const_cast<char*>(buffer.data.data<char>()), buffer.data.size()); |
+ jobject j_buffer = jni()->NewObject(*j_buffer_class_, j_buffer_ctor_, |
+ byte_buffer, buffer.binary); |
+ jni()->CallVoidMethod(*j_observer_global_, j_on_message_mid_, j_buffer); |
+ CHECK_EXCEPTION(jni()) << "error during CallVoidMethod"; |
} |
} // namespace webrtc_jni |