88#include " tgnet/FileLog.h"
99
1010JavaVM *java;
11- jclass jclass_RequestDelegateInternal;
12- jmethodID jclass_RequestDelegateInternal_run;
1311
1412jclass jclass_RequestTimeDelegate;
1513jmethodID jclass_RequestTimeDelegate_run;
1614
17- jclass jclass_QuickAckDelegate;
18- jmethodID jclass_QuickAckDelegate_run;
19-
20- jclass jclass_WriteToSocketDelegate;
21- jmethodID jclass_WriteToSocketDelegate_run;
22-
2315jclass jclass_ConnectionsManager;
16+ jmethodID jclass_ConnectionsManager_onRequestClear;
17+ jmethodID jclass_ConnectionsManager_onRequestComplete;
18+ jmethodID jclass_ConnectionsManager_onRequestQuickAck;
19+ jmethodID jclass_ConnectionsManager_onRequestWriteToSocket;
2420jmethodID jclass_ConnectionsManager_onUnparsedMessageReceived;
2521jmethodID jclass_ConnectionsManager_onUpdate;
2622jmethodID jclass_ConnectionsManager_onSessionCreated;
@@ -93,22 +89,10 @@ jint getTimeDifference(JNIEnv *env, jclass c, jint instanceNum) {
9389 return ConnectionsManager::getInstance (instanceNum).getTimeDifference ();
9490}
9591
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) {
9793 TL_api_request *request = new TL_api_request ();
9894 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) {
11296 TL_api_response *resp = (TL_api_response *) response;
11397 jlong ptr = 0 ;
11498 jint errorCode = 0 ;
@@ -125,25 +109,23 @@ void sendRequest(JNIEnv *env, jclass c, jint instanceNum, jlong object, jobject
125109 errorText = jniEnv[instanceNum]->NewStringUTF (" UTF-8 ERROR" );
126110 }
127111 }
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);
131113 if (errorText != nullptr ) {
132114 jniEnv[instanceNum]->DeleteLocalRef (errorText);
133115 }
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);
143123}
144124
145125void 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+ }));
147129}
148130
149131void failNotRunningRequest (JNIEnv *env, jclass c, jint instanceNum, jint token) {
@@ -452,7 +434,7 @@ static JNINativeMethod ConnectionsManagerMethods[] = {
452434 {" native_getCurrentDatacenterId" , " (I)I" , (void *) getCurrentDatacenterId},
453435 {" native_isTestBackend" , " (I)I" , (void *) isTestBackend},
454436 {" 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},
456438 {" native_cancelRequest" , " (IIZ)V" , (void *) cancelRequest},
457439 {" native_cleanUp" , " (IZ)V" , (void *) cleanUp},
458440 {" native_cancelRequestsForGuid" , " (II)V" , (void *) cancelRequestsForGuid},
@@ -503,16 +485,6 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
503485 return JNI_FALSE;
504486 }
505487
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-
516488 DEBUG_REF (" RequestTimeDelegate class" );
517489 jclass_RequestTimeDelegate = (jclass) env->NewGlobalRef (env->FindClass (" org/telegram/tgnet/RequestTimeDelegate" ));
518490 if (jclass_RequestTimeDelegate == 0 ) {
@@ -523,28 +495,25 @@ extern "C" int registerNativeTgNetFunctions(JavaVM *vm, JNIEnv *env) {
523495 return JNI_FALSE;
524496 }
525497
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 ) {
529501 return JNI_FALSE;
530502 }
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 ) {
533505 return JNI_FALSE;
534506 }
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 ) {
539509 return JNI_FALSE;
540510 }
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 ) {
543513 return JNI_FALSE;
544514 }
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 ) {
548517 return JNI_FALSE;
549518 }
550519 jclass_ConnectionsManager_onUnparsedMessageReceived = env->GetStaticMethodID (jclass_ConnectionsManager, " onUnparsedMessageReceived" , " (JIJ)V" );
0 commit comments