2014-09-16 2 views
4

У меня проблема с API Telegram
Всякий раз, когда я выполняю RpcCall, он всегда дает мне исключение Timeout, за исключением случаев, когда я выполняю вызов NonAuth.Java Telegram API RpcCall Timeout

Я могу войти в свой аккаунт с номером уже и я установил аутентифицирован правда в моем AbsApiState и все еще может сделать только NonAuth вызовы

Вот мой код:

private void startApi() throws Exception 
{ 
    api = new TelegramApi(new MyApiStorage(Moin.config.getProp("useTest").equalsIgnoreCase("true") ? true : false), 
      new AppInfo(Moin.api_id, "console", "???", "???", "en"), 
      new ApiCallback() 
    { 

     @Override 
     public void onAuthCancelled(TelegramApi arg0) 
     { 
      System.out.println("AuthCancelled"); 
     } 

     @Override 
     public void onUpdate(TLAbsUpdates update) 
     { 
      System.out.println("Updated | " + update.getClass()); 
     } 

     @Override 
     public void onUpdatesInvalidated(TelegramApi arg0) 
     { 
      System.out.println("Updatefailed"); 
     } 

    }); 

    TLConfig config = null; 
    config = api.doRpcCallNonAuth(new TLRequestHelpGetConfig()); 

    if(config != null) 
     api.getState().updateSettings(config); 
    else 
     throw new Exception("config is null, could not update DC List"); 
    login(); 
} 


private void login() throws IOException 
{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
     TLSentCode code = null; 
     String defaultNumber = Moin.config.getProp("phoneNumber"); 
     System.out.println("Enter a Phone Number (Default ist " + defaultNumber + "):"); 
     String number = reader.readLine(); 
     if(number.equals(" ")) 
      number = defaultNumber; 

     System.out.println("Sending to " + number + " ..."); 
     try 
     { 
      code = api.doRpcCallNonAuth(new TLRequestAuthSendCode(number, 0, Moin.api_id, Moin.api_hash, "en")); 
     } 
     catch (RpcException e) 
     { 
      if (e.getErrorCode() == 303) 
      { 
       int destDC = 0; 
       if (e.getErrorTag().startsWith("NETWORK_MIGRATE_")) 
       { 
        destDC = Integer.parseInt(e.getErrorTag().substring("NETWORK_MIGRATE_".length())); 
       } 
       else if (e.getErrorTag().startsWith("PHONE_MIGRATE_")) 
       { 
        destDC = Integer.parseInt(e.getErrorTag().substring("PHONE_MIGRATE_".length())); 
       } 
       else if (e.getErrorTag().startsWith("USER_MIGRATE_")) 
       { 
        destDC = Integer.parseInt(e.getErrorTag().substring("USER_MIGRATE_".length())); 
       } 
       else 
       { 
        e.printStackTrace(); 
       } 
       api.switchToDc(destDC); 
       code = api.doRpcCallNonAuth(new TLRequestAuthSendCode(number, 0, Moin.api_id, Moin.api_hash, "en")); 
      } 
      else 
       e.printStackTrace(); 
     } 

     String hash = code.getPhoneCodeHash(); 

     System.out.println("Please Enter the Code:"); 
     String smsCode = reader.readLine(); 

     TLAuthorization auth = api.doRpcCallNonAuth(new TLRequestAuthSignIn(number, hash, smsCode)); 
     api.getState().setAuthenticated(api.getState().getPrimaryDc(), true); 


     //This is where I get the Error 
     TLExportedAuthorization test = api.doRpcCall(new TLRequestAuthExportAuthorization(api.getState().getPrimaryDc())); 
     System.out.println(test.getId()); 


     FileOutputStream stream = new FileOutputStream(Paths.get("").toAbsolutePath().toString() + File.separator + "test.txt"); 
     try 
     { 
      stream.write(test.getBytes().getData()); 
     } 
     finally 
     { 
      stream.close(); 
     } 

     TLState state = api.doRpcCall(new TLRequestUpdatesGetState()); 
     System.out.println(state.getDate() + " | " + state.getPts() + " | " + state.getQts() + " | " + state.getUnreadCount()); 




     TLAbsUser user = auth.getUser(); 

} 

А вот ошибка:

TelegramApi#1001:Timeout Iteration 
TelegramApi#1001:RPC#3: Timeout (14999 ms) 
TelegramApi#1001:Timeout Iteration 
org.telegram.api.engine.TimeoutException 
     at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:364) 
     at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:309) 
     at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:400) 
     at org.telegram.api.engine.TelegramApi.doRpcCall(TelegramApi.java:396) 
     at at.nonon.telegram.telegram.Telegram.login(Telegram.java:165) 
     at at.nonon.telegram.telegram.Telegram.startApi(Telegram.java:105) 
     at at.nonon.telegram.telegram.Telegram.<init>(Telegram.java:54) 
     at at.nonon.telegram.telegram.ApiManager.startNew(ApiManager.java:21) 
     at at.nonon.telegram.Moin.onApiStart(Moin.java:31) 

Я взял много кода из телеграммы-бота (https://github.com/ex3ndr/telegram-bot), но даже если я копировать вставить его код, он все еще не работает ...

Спасибо заранее,

+0

такой же проблема здесь. – user1052080

ответ

3

эта проблема со мной тоже. Я предполагаю, что вы находитесь в дебианском или другом Linux-окне. Проблема заключается в использовании Oracle JDK генератора случайных чисел linux.

Для того, чтобы заставить его работать, запустите приложение, как это:

java -Djava.security.egd=file:/dev/./urandom -jar foo.jar 

... смысл, вы должны указать параметр java.security.egd.

Подробности можно найти здесь: https://github.com/ex3ndr/telegram-api/issues/9#issuecomment-38175765 и здесь: http://www.virtualzone.de/2011/10/javas-securerandomgenerateseed-on-linux.html

+0

Ты потрясающий. это отлично работает – EN20

0

Он начал работать для меня после того, как я изменил IP-адрес сервера в MemoryApiState, как показано ниже

public void start(boolean isTest) { 
    connections = new HashMap<>(); 
    connections.put(1, new ConnectionInfo[]{ 
      new ConnectionInfo(1, 0, isTest ? "149.154.175.10" : "149.154.175.50", 443), 

    }); 
} 
0

Ваш тайм-аут может произойти для несколько причин - см. мой ответ на
TimeoutException on telegram java client

+0

Лучше всего поставить вопрос на дублирование, если вы чувствуете, что уже ответили на этот вопрос. –

+0

@PetterFriberg - вопрос на самом деле не дубликат, потому что они задают разные вещи, но я думаю, что основная проблема такая же. Вот почему я добавил ссылку здесь. Я долгое время использовал этот сайт, но никогда не писал - так что я мог бы не понимать правила четко – Sam