8
8
#include " tgnet/FileLog.h"
9
9
10
10
JavaVM *java;
11
- jclass jclass_RequestDelegateInternal;
12
- jmethodID jclass_RequestDelegateInternal_run;
13
11
14
12
jclass jclass_RequestTimeDelegate;
15
13
jmethodID jclass_RequestTimeDelegate_run;
16
14
17
- jclass jclass_QuickAckDelegate;
18
- jmethodID jclass_QuickAckDelegate_run;
19
-
20
- jclass jclass_WriteToSocketDelegate;
21
- jmethodID jclass_WriteToSocketDelegate_run;
22
-
23
15
jclass jclass_ConnectionsManager;
16
+ jmethodID jclass_ConnectionsManager_onRequestClear;
17
+ jmethodID jclass_ConnectionsManager_onRequestComplete;
18
+ jmethodID jclass_ConnectionsManager_onRequestQuickAck;
19
+ jmethodID jclass_ConnectionsManager_onRequestWriteToSocket;
24
20
jmethodID jclass_ConnectionsManager_onUnparsedMessageReceived;
25
21
jmethodID jclass_ConnectionsManager_onUpdate;
26
22
jmethodID jclass_ConnectionsManager_onSessionCreated;
@@ -93,22 +89,10 @@ jint getTimeDifference(JNIEnv *env, jclass c, jint instanceNum) {
93
89
return ConnectionsManager::getInstance (instanceNum).getTimeDifference ();
94
90
}
95
91
96
- void sendRequest (JNIEnv *env, jclass c, jint instanceNum, jlong object, jobject onComplete, jobject onQuickAck, jobject onWriteToSocket, jint flags, jint datacenterId, jint connetionType , jboolean immediate, jint token) {
92
+ void sendRequest (JNIEnv *env, jclass c, jint instanceNum, jlong object, jint flags, jint datacenterId, jint connectionType , jboolean immediate, jint token) {
97
93
TL_api_request *request = new TL_api_request ();
98
94
request->request = (NativeByteBuffer *) (intptr_t ) object;
99
- if (onComplete != nullptr ) {
100
- DEBUG_REF (" sendRequest onComplete" );
101
- onComplete = env->NewGlobalRef (onComplete);
102
- }
103
- if (onQuickAck != nullptr ) {
104
- DEBUG_REF (" sendRequest onQuickAck" );
105
- onQuickAck = env->NewGlobalRef (onQuickAck);
106
- }
107
- if (onWriteToSocket != nullptr ) {
108
- DEBUG_REF (" sendRequest onWriteToSocket" );
109
- onWriteToSocket = env->NewGlobalRef (onWriteToSocket);
110
- }
111
- ConnectionsManager::getInstance (instanceNum).sendRequest (request, ([onComplete, instanceNum](TLObject *response, TL_error *error, int32_t networkType, int64_t responseTime, int64_t msgId) {
95
+ ConnectionsManager::getInstance (instanceNum).sendRequest (request, ([instanceNum, token](TLObject *response, TL_error *error, int32_t networkType, int64_t responseTime, int64_t msgId) {
112
96
TL_api_response *resp = (TL_api_response *) response;
113
97
jlong ptr = 0 ;
114
98
jint errorCode = 0 ;
@@ -125,25 +109,23 @@ void sendRequest(JNIEnv *env, jclass c, jint instanceNum, jlong object, jobject
125
109
errorText = jniEnv[instanceNum]->NewStringUTF (" UTF-8 ERROR" );
126
110
}
127
111
}
128
- if (onComplete != nullptr ) {
129
- jniEnv[instanceNum]->CallVoidMethod (onComplete, jclass_RequestDelegateInternal_run, ptr, errorCode, errorText, networkType, responseTime, msgId);
130
- }
112
+ jniEnv[instanceNum]->CallStaticVoidMethod (jclass_ConnectionsManager, jclass_ConnectionsManager_onRequestComplete, instanceNum, token, ptr, errorCode, errorText, networkType, responseTime, msgId);
131
113
if (errorText != nullptr ) {
132
114
jniEnv[instanceNum]->DeleteLocalRef (errorText);
133
115
}
134
- }), ([onQuickAck, instanceNum] {
135
- if (onQuickAck != nullptr ) {
136
- jniEnv[instanceNum]->CallVoidMethod (onQuickAck, jclass_QuickAckDelegate_run);
137
- }
138
- }), ([onWriteToSocket, instanceNum] {
139
- if (onWriteToSocket != nullptr ) {
140
- jniEnv[instanceNum]->CallVoidMethod (onWriteToSocket, jclass_WriteToSocketDelegate_run);
141
- }
142
- }), (uint32_t ) flags, (uint32_t ) datacenterId, (ConnectionType) connetionType, immediate, token, onComplete, onQuickAck, onWriteToSocket);
116
+ }), ([instanceNum, token] {
117
+ jniEnv[instanceNum]->CallStaticVoidMethod (jclass_ConnectionsManager, jclass_ConnectionsManager_onRequestQuickAck, instanceNum, token);
118
+ }), ([instanceNum, token] {
119
+ jniEnv[instanceNum]->CallStaticVoidMethod (jclass_ConnectionsManager, jclass_ConnectionsManager_onRequestWriteToSocket, instanceNum, token);
120
+ }), ([instanceNum, token] {
121
+ jniEnv[instanceNum]->CallStaticVoidMethod (jclass_ConnectionsManager, jclass_ConnectionsManager_onRequestClear, instanceNum, token, false );
122
+ }), (uint32_t ) flags, (uint32_t ) datacenterId, (ConnectionType) connectionType, immediate, token);
143
123
}
144
124
145
125
void cancelRequest (JNIEnv *env, jclass c, jint instanceNum, jint token, jboolean notifyServer) {
146
- return ConnectionsManager::getInstance (instanceNum).cancelRequest (token, notifyServer);
126
+ return ConnectionsManager::getInstance (instanceNum).cancelRequest (token, notifyServer, ([instanceNum, token]() -> void {
127
+ jniEnv[instanceNum]->CallStaticVoidMethod (jclass_ConnectionsManager, jclass_ConnectionsManager_onRequestClear, instanceNum, token, true );
128
+ }));
147
129
}
148
130
149
131
void failNotRunningRequest (JNIEnv *env, jclass c, jint instanceNum, jint token) {
@@ -452,7 +434,7 @@ static JNINativeMethod ConnectionsManagerMethods[] = {
452
434
{" native_getCurrentDatacenterId" , " (I)I" , (void *) getCurrentDatacenterId},
453
435
{" native_isTestBackend" , " (I)I" , (void *) isTestBackend},
454
436
{" native_getTimeDifference" , " (I)I" , (void *) getTimeDifference},
455
- {" native_sendRequest" , " (IJLorg/telegram/tgnet/RequestDelegateInternal;Lorg/telegram/tgnet/QuickAckDelegate;Lorg/telegram/tgnet/WriteToSocketDelegate;IIIZI )V" , (void *) sendRequest},
437
+ {" native_sendRequest" , " (IJIIIZI )V" , (void *) sendRequest},
456
438
{" native_cancelRequest" , " (IIZ)V" , (void *) cancelRequest},
457
439
{" native_cleanUp" , " (IZ)V" , (void *) cleanUp},
458
440
{" native_cancelRequestsForGuid" , " (II)V" , (void *) cancelRequestsForGuid},
@@ -503,16 +485,6 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
503
485
return JNI_FALSE;
504
486
}
505
487
506
- DEBUG_REF (" RequestDelegateInternal class" );
507
- jclass_RequestDelegateInternal = (jclass) env->NewGlobalRef (env->FindClass (" org/telegram/tgnet/RequestDelegateInternal" ));
508
- if (jclass_RequestDelegateInternal == 0 ) {
509
- return JNI_FALSE;
510
- }
511
- jclass_RequestDelegateInternal_run = env->GetMethodID (jclass_RequestDelegateInternal, " run" , " (JILjava/lang/String;IJJ)V" );
512
- if (jclass_RequestDelegateInternal_run == 0 ) {
513
- return JNI_FALSE;
514
- }
515
-
516
488
DEBUG_REF (" RequestTimeDelegate class" );
517
489
jclass_RequestTimeDelegate = (jclass) env->NewGlobalRef (env->FindClass (" org/telegram/tgnet/RequestTimeDelegate" ));
518
490
if (jclass_RequestTimeDelegate == 0 ) {
@@ -523,28 +495,25 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
523
495
return JNI_FALSE;
524
496
}
525
497
526
- DEBUG_REF (" QuickAckDelegate class" );
527
- jclass_QuickAckDelegate = (jclass) env->NewGlobalRef (env->FindClass (" org/telegram/tgnet/QuickAckDelegate " ));
528
- if (jclass_RequestDelegateInternal == 0 ) {
498
+ DEBUG_REF (" ConnectionsManager class" );
499
+ jclass_ConnectionsManager = (jclass) env->NewGlobalRef (env->FindClass (" org/telegram/tgnet/ConnectionsManager " ));
500
+ if (jclass_ConnectionsManager == 0 ) {
529
501
return JNI_FALSE;
530
502
}
531
- jclass_QuickAckDelegate_run = env->GetMethodID (jclass_QuickAckDelegate , " run " , " ()V" );
532
- if (jclass_QuickAckDelegate_run == 0 ) {
503
+ jclass_ConnectionsManager_onRequestClear = env->GetStaticMethodID (jclass_ConnectionsManager , " onRequestClear " , " (IIZ )V" );
504
+ if (jclass_ConnectionsManager_onRequestClear == 0 ) {
533
505
return JNI_FALSE;
534
506
}
535
-
536
- DEBUG_REF (" WriteToSocketDelegate class" );
537
- jclass_WriteToSocketDelegate = (jclass) env->NewGlobalRef (env->FindClass (" org/telegram/tgnet/WriteToSocketDelegate" ));
538
- if (jclass_WriteToSocketDelegate == 0 ) {
507
+ jclass_ConnectionsManager_onRequestComplete = env->GetStaticMethodID (jclass_ConnectionsManager, " onRequestComplete" , " (IIJILjava/lang/String;IJJ)V" );
508
+ if (jclass_ConnectionsManager_onRequestComplete == 0 ) {
539
509
return JNI_FALSE;
540
510
}
541
- jclass_WriteToSocketDelegate_run = env->GetMethodID (jclass_WriteToSocketDelegate , " run " , " ()V" );
542
- if (jclass_WriteToSocketDelegate_run == 0 ) {
511
+ jclass_ConnectionsManager_onRequestWriteToSocket = env->GetStaticMethodID (jclass_ConnectionsManager , " onRequestWriteToSocket " , " (II )V" );
512
+ if (jclass_ConnectionsManager_onRequestWriteToSocket == 0 ) {
543
513
return JNI_FALSE;
544
514
}
545
- DEBUG_REF (" ConnectionsManager class" );
546
- jclass_ConnectionsManager = (jclass) env->NewGlobalRef (env->FindClass (" org/telegram/tgnet/ConnectionsManager" ));
547
- if (jclass_ConnectionsManager == 0 ) {
515
+ jclass_ConnectionsManager_onRequestQuickAck = env->GetStaticMethodID (jclass_ConnectionsManager, " onRequestQuickAck" , " (II)V" );
516
+ if (jclass_ConnectionsManager_onRequestQuickAck == 0 ) {
548
517
return JNI_FALSE;
549
518
}
550
519
jclass_ConnectionsManager_onUnparsedMessageReceived = env->GetStaticMethodID (jclass_ConnectionsManager, " onUnparsedMessageReceived" , " (JIJ)V" );
0 commit comments