leopard8352
2023-12-04 8871a733498c8d717714b83bb096b7738224541a
提交 | 用户 | 时间
8871a7 1 #include "TapNative.h"
L 2
3 #include "Taptap.h"
4
5 // #define PLATFORM_ANDROID 1
6
7 #if PLATFORM_ANDROID
8 #include "Android/AndroidJNI.h"
9 #endif
10
11 #define JAVA_CLASS_NAME "com/leopard/taptap/TapNative"
12
13 TapNative::FTapNativeInitLoginOverEventHandle    TapNative::TapNativeInitLoginOverEventHandle;
14 TapNative::FTapNativeLoginOverEventHandle        TapNative::TapNativeLoginOverEventHandle;
15 TapNative::FTapNativeLoginFailEventHandle        TapNative::TapNativeLoginFailEventHandle;
16 bool TapNative::CheckLogin()
17 {
18 #if PLATFORM_ANDROID
19     if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
20     {
21         bool isOptional = false;
22         static jmethodID methodId = FJavaWrapper::FindMethod(Env,
23                 FJavaWrapper::GameActivityClassID,
24                 "CheckLogin",
25                 "()Z", isOptional);
26         if (methodId == 0)
27         {
28             TAPLOG_D(TEXT("没找到方法CheckLogin"));
29             return false;
30         }
31         TAPLOG_D(TEXT("找到方法CheckLogin"));
32         
33         return FJavaWrapper::CallBooleanMethod(Env, FJavaWrapper::GameActivityThis, methodId);
34     }
35     else
36     {
37         TAPLOG_D(TEXT("没找到JNIEnv"));
38         return false;
39     }
40 #else
41     TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
42     return true;
43 #endif
44 }
45 //(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
46 void TapNative::InitTapDB(FString clientId, FString clientToken, FString serverUrl, FString gameChannel,
47     FString gameVersion)
48 {
49 #if PLATFORM_ANDROID
50     if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
51     {
52         bool isOptional = false;
53         static jmethodID methodId = FJavaWrapper::FindMethod(Env,
54                 FJavaWrapper::GameActivityClassID,
55                 "InitTapDB",
56                 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", isOptional);
57         if (methodId == 0)
58         {
59             TAPLOG_D(TEXT("没找到方法InitTapDB"));
60             return;
61         }
62         TAPLOG_D(TEXT("找到方法InitTapDB"));
63         auto paramClientId = FJavaHelper::ToJavaString(Env,clientId);
64         auto paramClientToken = FJavaHelper::ToJavaString(Env,clientToken);
65         auto paramServerUrl = FJavaHelper::ToJavaString(Env,serverUrl);
66         auto paramGameChannel = FJavaHelper::ToJavaString(Env,gameChannel);
67         auto paramGameVersion = FJavaHelper::ToJavaString(Env,gameVersion);
68         return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId,
69             *paramClientId,
70             *paramClientToken,
71             *paramServerUrl,
72             *paramGameChannel,
73             *paramGameVersion);
74     }
75     else
76     {
77         TAPLOG_D(TEXT("没找到JNIEnv"));
78     }
79 #else
80     TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
81 #endif
82 }
83
84 void TapNative::InitLogin(FString clientId, FString clientToken, FString serverUrl)
85 {
86 #if PLATFORM_ANDROID
87     if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
88     {
89         bool isOptional = false;
90         static jmethodID methodId = FJavaWrapper::FindMethod(Env,
91                 FJavaWrapper::GameActivityClassID,
92                 "InitLogin",
93                 "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", isOptional);
94         if (methodId == 0)
95         {
96             TAPLOG_D(TEXT("没找到方法InitLogin"));
97             return;
98         }
99         TAPLOG_D(TEXT("找到方法InitLogin"));
100         auto paramClientId = FJavaHelper::ToJavaString(Env,clientId);
101         auto paramClientToken = FJavaHelper::ToJavaString(Env,clientToken);
102         auto paramServerUrl = FJavaHelper::ToJavaString(Env,serverUrl);
103         return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId,
104             *paramClientId,
105             *paramClientToken,
106             *paramServerUrl);
107     }
108     else
109     {
110         TAPLOG_D(TEXT("没找到JNIEnv"));
111     }
112 #else
113     TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
114     TapNativeInitLoginOverEventHandle.Execute();
115 #endif
116 }
117 //Login
118 void TapNative::Login()
119 {
120 #if PLATFORM_ANDROID
121     if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
122     {
123         bool isOptional = false;
124         static jmethodID methodId = FJavaWrapper::FindMethod(Env,
125                 FJavaWrapper::GameActivityClassID,
126                 "Login",
127                 "()V", isOptional);
128         if (methodId == 0)
129         {
130             TAPLOG_D(TEXT("没找到方法Login"));
131             return;
132         }
133         TAPLOG_D(TEXT("找到方法Login"));
134         return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId);
135     }
136     else
137     {
138         TAPLOG_D(TEXT("没找到JNIEnv"));
139     }
140 #else
141     TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
142     TapNativeLoginOverEventHandle.Execute(FString(),FString(),FString());
143 #endif
144 }
145
146 FString TapNative::GetCurrentProfile()
147 {
148 #if PLATFORM_ANDROID
149     if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
150     {
151         bool isOptional = false;
152         static jmethodID methodId = FJavaWrapper::FindMethod(Env,
153                 FJavaWrapper::GameActivityClassID,
154                 "GetCurrentProfile",
155                 "()Ljava/lang/String;", isOptional);
156         if (methodId == 0)
157         {
158             TAPLOG_D(TEXT("没找到方法GetCurrentProfile"));
159             return FString();
160         }
161         TAPLOG_D(TEXT("找到方法GetCurrentProfile"));
162         jstring result = (jstring)FJavaWrapper::CallObjectMethod(Env, FJavaWrapper::GameActivityThis, methodId);
163         return FJavaHelper::FStringFromLocalRef(Env,result);
164     }
165     else
166     {
167         TAPLOG_D(TEXT("没找到JNIEnv"));
168         return FString();
169     }
170 #else
171     TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
172     return TEXT("{}");
173 #endif
174 }
175 //()V
176 void TapNative::Logout()
177 {
178 #if PLATFORM_ANDROID
179     if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
180     {
181         bool isOptional = false;
182         static jmethodID methodId = FJavaWrapper::FindMethod(Env,
183                 FJavaWrapper::GameActivityClassID,
184                 "Logout",
185                 "()V", isOptional);
186         if (methodId == 0)
187         {
188             TAPLOG_D(TEXT("没找到方法Logout"));
189             return;
190         }
191         TAPLOG_D(TEXT("找到方法Logout"));
192         return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId);
193     }
194     else
195     {
196         TAPLOG_D(TEXT("没找到JNIEnv"));
197     }
198 #else
199     TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
200 #endif
201 }
202 //(Ljava/lang/String;Ljava/lang/String;)V
203 void TapNative::TapDBTraceEvent(FString eventName, FString jsonObject)
204 {
205 #if PLATFORM_ANDROID
206     if (JNIEnv* Env = FAndroidApplication::GetJavaEnv(true))
207     {
208         bool isOptional = false;
209         static jmethodID methodId = FJavaWrapper::FindMethod(Env,
210                 FJavaWrapper::GameActivityClassID,
211                 "TapDBTraceEvent",
212                 "(Ljava/lang/String;Ljava/lang/String;)V", isOptional);
213         if (methodId == 0)
214         {
215             TAPLOG_D(TEXT("没找到方法TapDBTraceEvent"));
216             return;
217         }
218         TAPLOG_D(TEXT("找到方法TapDBTraceEvent"));
219         auto paramEventName = FJavaHelper::ToJavaString(Env,eventName);
220         auto paramJsonObject = FJavaHelper::ToJavaString(Env,jsonObject);
221         return FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, methodId,
222             *paramEventName,
223             *paramJsonObject);
224     }
225     else
226     {
227         TAPLOG_D(TEXT("没找到JNIEnv"));
228     }
229 #else
230     TAPLOG_D(TEXT("不是安卓Native不能调用原生方法"));
231 #endif
232 }
233
234 #if PLATFORM_ANDROID
235 JNI_METHOD void Java_com_leopard_taptap_TapNative_NativeInitLoginOver(
236     JNIEnv* jenv,
237     jclass cls)
238 {
239     TAPLOG_D(TEXT("登陆初始化完毕!!! "))
240     AsyncTask(ENamedThreads::GameThread, [=]()
241     {
242         TapNative::TapNativeInitLoginOverEventHandle.Execute();
243     });
244 }
245 //TapNativeLoginFailEventHandle
246 JNI_METHOD void Java_com_leopard_taptap_TapNative_NativeLoginFail(
247     JNIEnv* jenv,
248     jclass cls,
249     jstring debugeMessage,
250     jint errCode)
251 {
252     auto paramDebugMessage = FJavaHelper::FStringFromParam(jenv,debugeMessage);
253     
254     TAPLOG_E(TEXT("登陆失败!!! %s,%d"))
255     AsyncTask(ENamedThreads::GameThread, [=]()
256     {
257         TapNative::TapNativeLoginFailEventHandle.Execute(paramDebugMessage,(int32)errCode);
258     });
259 }
260
261 JNI_METHOD void Java_com_leopard_taptap_TapNative_NativeLoginOver(
262     JNIEnv* jenv,
263     jclass cls,
264     jstring objectId,
265     jstring avatar,
266     jstring nickName)
267 {
268     auto paramObjectId    = FJavaHelper::FStringFromParam(jenv,objectId);
269     auto paramAvatar    = FJavaHelper::FStringFromParam(jenv,avatar);
270     auto paramNickName    = FJavaHelper::FStringFromParam(jenv,nickName);
271     TAPLOG_D(TEXT("登陆完毕!!! %s,%s,%s"),*paramObjectId,*paramNickName,*paramAvatar)
272     AsyncTask(ENamedThreads::GameThread, [=]()
273     {
274         TapNative::TapNativeLoginOverEventHandle.Execute(paramObjectId,paramAvatar,paramNickName);
275     });
276 }
277 #endif