| 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
|
|
|