Twitch SDK (Internal)
java_nativelistener.h
Go to the documentation of this file.
1 /********************************************************************************************
2 * Twitch Broadcasting SDK
3 *
4 * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5 * may not be copied or used except in accordance with the terms of that agreement
6 * Copyright (c) 2012-2016 Twitch Interactive, Inc.
7 *********************************************************************************************/
8 
9 #pragma once
10 
13 #include "twitchsdk/core/module.h"
14 
15 
16 namespace ttv
17 {
18  namespace binding
19  {
20  namespace java
21  {
22  template <typename LISTENER_TYPE>
24 
25  template <typename LISTENER_TYPE>
27  }
28  }
29 }
30 
31 
32 template <typename LISTENER_TYPE>
33 class ttv::binding::java::NativeListenerProxy : public LISTENER_TYPE
34 {
35 public:
37  {
38  }
39 
40  void SetListener(jobject jListener)
41  {
42  AutoJEnv jEnv;
43 
44  if (mJavaListener.GetInstance() != nullptr)
45  {
46  if (jEnv->IsSameObject(mJavaListener.GetInstance(), jListener))
47  {
48  return;
49  }
50  }
51 
53 
54  if (jListener != nullptr)
55  {
56  mJavaListener.Bind(jEnv, jListener);
57  }
58 
59  return;
60  }
61 
62  jobject GetListener() const
63  {
64  return mJavaListener.GetInstance();
65  }
66 
67 protected:
70 };
71 
72 
73 template <typename LISTENER_TYPE>
75 {
76 public:
77  NativeModuleListener(jobject jModule)
78  {
79  mJavaModule.Bind(gActiveJavaEnvironment, jModule);
80 
82  }
83 
84  virtual void ModuleStateChanged(ttv::IModule* /*source*/, ttv::IModule::State state, TTV_ErrorCode ec) override
85  {
86  jobject jListener = NativeListenerProxy<LISTENER_TYPE>::mJavaListener.GetInstance();
87  if (jListener == nullptr)
88  {
89  return;
90  }
91 
92  // Notify the java client
95 
96  gActiveJavaEnvironment->CallVoidMethod(jListener, mModuleListenerInfo.methods["moduleStateChanged"], mJavaModule.GetInstance(), jState, jResult);
97  }
98 
99 protected:
102 };
bool Bind(JNIEnv *jEnv, jobject jLocalObject)
NativeModuleListener(jobject jModule)
Definition: java_nativelistener.h:77
Definition: java_nativelistener.h:23
Definition: java_nativelistener.h:26
Definition: java_utility.h:402
Definition: module.h:37
JavaClassInfo mModuleListenerInfo
Definition: java_nativelistener.h:101
jobject GetJavaInstance_ErrorCode(JNIEnv *jEnv, TTV_ErrorCode err)
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
#define AUTO_DELETE_LOCAL_REF(JENV, TYPE, VAR, VALUE)
Definition: java_utility.h:26
GlobalJavaObjectReference mJavaListener
Definition: java_nativelistener.h:68
jobject GetListener() const
Definition: java_nativelistener.h:62
State
Definition: module.h:40
virtual void ModuleStateChanged(ttv::IModule *, ttv::IModule::State state, TTV_ErrorCode ec) override
Definition: java_nativelistener.h:84
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
JavaClassInfo & GetJavaClassInfo_ModuleState(JNIEnv *jEnv)
void SetListener(jobject jListener)
Definition: java_nativelistener.h:40
virtual ~NativeListenerProxy()
Definition: java_nativelistener.h:36
Definition: java_utility.h:194
JNIEnv * gActiveJavaEnvironment
This is cached on every call into native code so that it&#39;s current. Never use from another thread...
GlobalJavaObjectReference mJavaModule
Definition: java_nativelistener.h:100
jobject GetJavaInstance_SimpleEnum(JNIEnv *jEnv, JavaClassInfo &info, T val)
Definition: java_utility.h:451
JavaClassInfo & GetJavaClassInfo_IModuleListener(JNIEnv *jEnv)
jobject GetInstance() const
Definition: java_utility.h:228
Definition: java_utility.h:216
JavaClassInfo mListenerInfo
Definition: java_nativelistener.h:69