Przeglądaj źródła

Cancel handles on disconnect

painor 5 lat temu
rodzic
commit
a02ccb1eb5

+ 2 - 9
examples/main.js

@@ -25,14 +25,7 @@ console.log(message.bytes.toString('hex'));
     const client = new TelegramClient(sessionName, apiId, apiHash)
     await client.connect()
 
-
-    client._authorized = true
-
-    const message = new SendMessageRequest({
-        peer: inputPeer,
-        message: 'hi from GramJS',
-    })
-    const r = await client.invoke(message)
-    console.log(r)
     console.log('You should now be connected.')
+    await client.disconnect()
+    await client.connect()
 })()

+ 8 - 8
gramjs/client/TelegramClient.js

@@ -32,7 +32,7 @@ class TelegramClient {
         appVersion: null,
         langCode: 'en',
         systemLangCode: 'en',
-        baseLogger: null,
+        baseLogger: 'gramjs',
     }
 
     constructor(sessionName, apiId, apiHash, opts = TelegramClient.DEFAULT_OPTIONS) {
@@ -40,6 +40,7 @@ class TelegramClient {
             throw Error('Your API ID or Hash are invalid. Please read "Requirements" on README.md')
         }
         const args = { ...TelegramClient.DEFAULT_OPTIONS, ...opts }
+        console.log("actual args are : ",args)
         this.apiId = apiId
         this.apiHash = apiHash
         this._useIPV6 = args.useIPV6
@@ -50,9 +51,9 @@ class TelegramClient {
             this._log = args.baseLogger
         }
         const session = Session.tryLoadOrCreateNew(sessionName)
-
+        console.log(session.serverAddress)
         if (!session.serverAddress || (session.serverAddress.includes(':') !== this._useIPV6)) {
-            session.setDc(DEFAULT_DC_ID, this._useIPV6 ? DEFAULT_IPV6_IP : DEFAULT_IPV4_IP, DEFAULT_PORT)
+            session.setDC(DEFAULT_DC_ID, this._useIPV6 ? DEFAULT_IPV6_IP : DEFAULT_IPV4_IP, DEFAULT_PORT)
         }
         this.floodSleepLimit = args.floodSleepLimit
 
@@ -81,12 +82,12 @@ class TelegramClient {
                 layer: LAYER,
                 query: new functions.InitConnectionRequest({
                     apiId: this.apiId,
-                    deviceModel: args.deviceModel | os.type() | 'Unkown',
-                    systemVersion: args.systemVersion | os.release() | '1.0',
-                    appVersion: args.appVersion | '1.0',
+                    deviceModel: args.deviceModel || os.type().toString() || 'Unknown',
+                    systemVersion: args.systemVersion || os.release().toString() || '1.0',
+                    appVersion: args.appVersion || '1.0',
                     langCode: args.langCode,
                     langPack: '', // this should be left empty.
-                    systemLangCode: args.systemVersion,
+                    systemLangCode: args.systemLangCode,
                     query: x,
                     proxy: null, // no proxies yet.
                 }),
@@ -94,7 +95,6 @@ class TelegramClient {
         }
         // These will be set later
         this._config = null
-
         this._sender = new MTProtoSender(this.session.authKey, {
             logger: this._log,
         })

+ 3 - 0
gramjs/network/MTProtoPlainSender.js

@@ -19,8 +19,11 @@ class MTProtoPlainSender {
      * @param loggers
      */
     constructor(connection, loggers) {
+        console.log("plz?")
         this._state = new MTProtoState(connection, loggers)
+        console.log("dud?")
         this._connection = connection
+        console.log("ok connection is ",connection)
     }
 
     /**

+ 24 - 22
gramjs/network/MTProtoSender.js

@@ -48,32 +48,33 @@ format.extend(String.prototype, {})
  * key exists yet.
  */
 class MTProtoSender {
+
+    static DEFAULT_OPTIONS = {
+        logger: null,
+        retries: 5,
+        delay: 1,
+        autoReconnect: true,
+        connectTimeout: null,
+        authKeyCallback: null,
+        updateCallback: null,
+        autoReconnectCallback: null,
+    }
+
     /**
      * @param authKey
-     * @param opt
+     * @param opts
      */
-    constructor(
-        authKey,
-        opt = {
-            logger: null,
-            retries: 5,
-            delay: 1,
-            autoReconnect: true,
-            connectTimeout: null,
-            authKeyCallback: null,
-            updateCallback: null,
-            autoReconnectCallback: null,
-        },
-    ) {
+    constructor(authKey, opts) {
+        const args = { ...MTProtoSender.DEFAULT_OPTIONS, ...opts }
         this._connection = null
-        this._log = opt.logger
-        this._retries = opt.retries
-        this._delay = opt.delay
-        this._autoReconnect = opt.autoReconnect
-        this._connectTimeout = opt.connectTimeout
-        this._authKeyCallback = opt.authKeyCallback
-        this._updateCallback = opt.updateCallback
-        this._autoReconnectCallback = opt.autoReconnectCallback
+        this._log = args.logger
+        this._retries = args.retries
+        this._delay = args.delay
+        this._autoReconnect = args.autoReconnect
+        this._connectTimeout = args.connectTimeout
+        this._authKeyCallback = args.authKeyCallback
+        this._updateCallback = args.updateCallback
+        this._autoReconnectCallback = args.autoReconnectCallback
 
         /**
          * Whether the user has explicitly connected or disconnected.
@@ -152,6 +153,7 @@ class MTProtoSender {
      * @returns {Promise<boolean>}
      */
     async connect(connection) {
+        console.log("the connc is : ",connection);
         if (this._user_connected) {
             this._log.info('User is already connected!')
             return false

+ 1 - 0
gramjs/network/MTProtoState.js

@@ -36,6 +36,7 @@ class MTProtoState {
     constructor(authKey, loggers) {
         this.authKey = authKey
         this._log = loggers
+        console.log("creating state ?");
         this.timeOffset = 0
         this.salt = 0
 

+ 6 - 2
gramjs/network/connection/Connection.js

@@ -1,6 +1,7 @@
 const { PromiseSocket } = require('promise-socket')
 const { Socket } = require('net')
 const AsyncQueue = require('../../extensions/AsyncQueue')
+
 /**
  * The `Connection` class is a wrapper around ``asyncio.open_connection``.
  *
@@ -13,7 +14,7 @@ const AsyncQueue = require('../../extensions/AsyncQueue')
  * the client is disconnected (includes remote disconnections).
  */
 class Connection {
-    PacketCodecClass = null;
+    PacketCodecClass = null
 
     constructor(ip, port, dcId, loggers) {
         this._ip = ip
@@ -88,9 +89,12 @@ class Connection {
         while (this._connected) {
             try {
                 data = await this._recv()
+                if (!data) {
+                    return
+                }
             } catch (e) {
                 console.log(e)
-                this._log.info('The server closed the connection')
+                this._log.info('an error occured')
             }
             await this._recvArray.push(data)
         }

+ 1 - 3
gramjs/network/connection/TCPFull.js

@@ -29,9 +29,7 @@ class FullPacketCodec extends PacketCodec {
         // process.exit(0);
 
         if (packetLenSeq === undefined) {
-            console.log('connection closed. exiting')
-            process.exit(0)
-            throw new Error('closed connection')
+            return false
         }
 
         const res = struct.unpack('<ii', packetLenSeq)

+ 23 - 4
gramjs/sessions/Session.js

@@ -14,8 +14,9 @@ BigInt.parseJson = function() {
 class Session {
     constructor(sessionUserId) {
         this.sessionUserId = sessionUserId
-        this.serverAddress = 0
-        this.port = 0
+        this._serverAddress = null
+        this.__dcId = 0
+        this._port = null
         // this.serverAddress = "localhost";
         // this.port = 21;
         this.authKey = undefined
@@ -44,6 +45,24 @@ class Session {
         }
     }
 
+    setDC(dcId, serverAddress, port) {
+        this._dcId = dcId | 0
+        this._serverAddress = serverAddress
+        this._port = port
+    }
+
+    get serverAddress() {
+        return this._serverAddress
+    }
+
+    get port() {
+        return this._port
+    }
+
+    get dcId() {
+        return this._dcId
+    }
+
     static tryLoadOrCreateNew(sessionUserId) {
         if (sessionUserId === undefined) {
             return new Session()
@@ -60,8 +79,8 @@ class Session {
 
             const authKey = new AuthKey(Buffer.from(ob.authKey._key.data))
             const session = new Session(ob.sessionUserId)
-            session.serverAddress = ob.serverAddress
-            session.port = ob.port
+            session._serverAddress = ob.serverAddress
+            session._port = ob.port
             // this.serverAddress = "localhost";
             // this.port = 21;
             session.authKey = authKey