Update to version 4. Change client creation method, add .initialize(handlers)
This commit is contained in:
parent
1492b63c34
commit
35e3b7748d
@ -159,7 +159,8 @@ public final class Example {
|
||||
case TdApi.AuthorizationStateClosed.CONSTRUCTOR:
|
||||
print("Closed");
|
||||
if (!needQuit) {
|
||||
client = ClientManager.create(new UpdateHandler(), new ErrorHandler(), new ErrorHandler()); // recreate client after previous has closed
|
||||
client = ClientManager.create(); // recreate client after previous has closed
|
||||
client.initialize(new UpdateHandler(), new ErrorHandler(), new ErrorHandler());
|
||||
} else {
|
||||
canQuit = true;
|
||||
}
|
||||
@ -282,7 +283,7 @@ public final class Example {
|
||||
java.util.Iterator<OrderedChat> iter = mainChatList.iterator();
|
||||
System.out.println();
|
||||
System.out.println("First " + limit + " chat(s) out of " + mainChatList.size() + " known chat(s):");
|
||||
for (int i = 0; i < limit; i++) {
|
||||
for (int i = 0; i < limit && iter.hasNext(); i++) {
|
||||
long chatId = iter.next().chatId;
|
||||
TdApi.Chat chat = chats.get(chatId);
|
||||
synchronized (chat) {
|
||||
@ -306,7 +307,8 @@ public final class Example {
|
||||
|
||||
// create client
|
||||
Init.start();
|
||||
client = ClientManager.create(new UpdateHandler(), new ErrorHandler(), new ErrorHandler());
|
||||
client = ClientManager.create();
|
||||
client.initialize(new UpdateHandler(), new ErrorHandler(), new ErrorHandler());
|
||||
|
||||
client.execute(new TdApi.SetLogVerbosityLevel(0));
|
||||
// disable TDLib log
|
||||
|
@ -1,7 +1,5 @@
|
||||
package it.tdlight.common;
|
||||
|
||||
import it.tdlight.jni.TdApi;
|
||||
|
||||
public abstract class CommonClientManager {
|
||||
|
||||
private static InternalClientManager getClientManager(String implementationName) {
|
||||
@ -9,33 +7,12 @@ public abstract class CommonClientManager {
|
||||
return InternalClientManager.get(implementationName);
|
||||
}
|
||||
|
||||
protected static TelegramClient create(String implementationName,
|
||||
ResultHandler updateHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
InternalClient client = new InternalClient(getClientManager(implementationName),
|
||||
updateHandler,
|
||||
updateExceptionHandler,
|
||||
defaultExceptionHandler
|
||||
);
|
||||
return create(client);
|
||||
}
|
||||
|
||||
protected static TelegramClient create(String implementationName,
|
||||
UpdatesHandler updatesHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
InternalClient client = new InternalClient(getClientManager(implementationName),
|
||||
updatesHandler,
|
||||
updateExceptionHandler,
|
||||
defaultExceptionHandler
|
||||
);
|
||||
protected static TelegramClient create(String implementationName) {
|
||||
InternalClient client = new InternalClient(getClientManager(implementationName));
|
||||
return create(client);
|
||||
}
|
||||
|
||||
private static TelegramClient create(InternalClient internalClient) {
|
||||
// Send a dummy request because @levlam is too lazy to fix race conditions in a better way
|
||||
internalClient.send(new TdApi.GetAuthorizationState(), (result) -> {}, ex -> {});
|
||||
return internalClient;
|
||||
}
|
||||
}
|
||||
|
@ -13,38 +13,16 @@ public class InternalClient implements ClientEventsHandler, TelegramClient {
|
||||
|
||||
private final ConcurrentHashMap<Long, Handler> handlers = new ConcurrentHashMap<Long, Handler>();
|
||||
|
||||
private final int clientId;
|
||||
private int clientId;
|
||||
private final InternalClientManager clientManager;
|
||||
private final Handler updateHandler;
|
||||
private final MultiHandler updatesHandler;
|
||||
private final ExceptionHandler defaultExceptionHandler;
|
||||
private Handler updateHandler;
|
||||
private MultiHandler updatesHandler;
|
||||
private ExceptionHandler defaultExceptionHandler;
|
||||
|
||||
private final AtomicBoolean isClosed = new AtomicBoolean();
|
||||
|
||||
public InternalClient(InternalClientManager clientManager,
|
||||
ResultHandler updateHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
this.updateHandler = new Handler(updateHandler, updateExceptionHandler);
|
||||
this.updatesHandler = null;
|
||||
this.defaultExceptionHandler = defaultExceptionHandler;
|
||||
public InternalClient(InternalClientManager clientManager) {
|
||||
this.clientManager = clientManager;
|
||||
this.clientId = NativeClientAccess.create();
|
||||
|
||||
clientManager.registerClient(clientId, this);
|
||||
}
|
||||
|
||||
public InternalClient(InternalClientManager clientManager,
|
||||
UpdatesHandler updatesHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
this.updateHandler = null;
|
||||
this.updatesHandler = new MultiHandler(updatesHandler, updateExceptionHandler);
|
||||
this.clientManager = clientManager;
|
||||
this.defaultExceptionHandler = defaultExceptionHandler;
|
||||
this.clientId = NativeClientAccess.create();
|
||||
|
||||
clientManager.registerClient(clientId, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -131,6 +109,35 @@ public class InternalClient implements ClientEventsHandler, TelegramClient {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(UpdatesHandler updatesHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
this.updateHandler = null;
|
||||
this.updatesHandler = new MultiHandler(updatesHandler, updateExceptionHandler);
|
||||
this.defaultExceptionHandler = defaultExceptionHandler;
|
||||
|
||||
clientManager.registerClient(clientId, this);
|
||||
|
||||
// Send a dummy request because @levlam is too lazy to fix race conditions in a better way
|
||||
this.send(new TdApi.GetAuthorizationState(), (result) -> {}, ex -> {});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize(ResultHandler updateHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
this.updateHandler = new Handler(updateHandler, updateExceptionHandler);
|
||||
this.updatesHandler = null;
|
||||
this.defaultExceptionHandler = defaultExceptionHandler;
|
||||
|
||||
this.clientId = NativeClientAccess.create();
|
||||
clientManager.registerClient(clientId, this);
|
||||
|
||||
// Send a dummy request because @levlam is too lazy to fix race conditions in a better way
|
||||
this.send(new TdApi.GetAuthorizationState(), (result) -> {}, ex -> {});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(Function query, ResultHandler resultHandler, ExceptionHandler exceptionHandler) {
|
||||
if (isClosedAndMaybeThrow(query)) {
|
||||
|
@ -4,6 +4,31 @@ import it.tdlight.jni.TdApi;
|
||||
|
||||
public interface TelegramClient {
|
||||
|
||||
/**
|
||||
* Initialize the client synchronously.
|
||||
* @param updatesHandler Handler in which the updates are received
|
||||
* @param updateExceptionHandler Handler in which the errors from updates are received
|
||||
* @param defaultExceptionHandler Handler that receives exceptions triggered in a handler
|
||||
*/
|
||||
void initialize(UpdatesHandler updatesHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler);
|
||||
|
||||
/**
|
||||
* Initialize the client synchronously.
|
||||
* @param updateHandler Handler in which the updates are received
|
||||
* @param updateExceptionHandler Handler in which the errors from updates are received
|
||||
* @param defaultExceptionHandler Handler that receives exceptions triggered in a handler
|
||||
*/
|
||||
default void initialize(ResultHandler updateHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
this.initialize((UpdatesHandler) updates -> updates.forEach(updateHandler::onResult),
|
||||
updateExceptionHandler,
|
||||
defaultExceptionHandler
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends a request to the TDLib.
|
||||
*
|
||||
|
@ -1,10 +1,7 @@
|
||||
package it.tdlight.tdlib;
|
||||
|
||||
import it.tdlight.common.CommonClientManager;
|
||||
import it.tdlight.common.ExceptionHandler;
|
||||
import it.tdlight.common.ResultHandler;
|
||||
import it.tdlight.common.TelegramClient;
|
||||
import it.tdlight.common.UpdatesHandler;
|
||||
|
||||
/**
|
||||
* Interface for interaction with TDLib.
|
||||
@ -13,17 +10,7 @@ public class ClientManager extends CommonClientManager {
|
||||
|
||||
private static final String implementationName = "tdlib";
|
||||
|
||||
public static TelegramClient create(
|
||||
ResultHandler updateHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
return CommonClientManager.create(implementationName, updateHandler, updateExceptionHandler, defaultExceptionHandler);
|
||||
}
|
||||
|
||||
public static TelegramClient create(
|
||||
UpdatesHandler updatesHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
return CommonClientManager.create(implementationName, updatesHandler, updateExceptionHandler, defaultExceptionHandler);
|
||||
public static TelegramClient create() {
|
||||
return CommonClientManager.create(implementationName);
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,7 @@
|
||||
package it.tdlight.tdlight;
|
||||
|
||||
import it.tdlight.common.CommonClientManager;
|
||||
import it.tdlight.common.ExceptionHandler;
|
||||
import it.tdlight.common.ResultHandler;
|
||||
import it.tdlight.common.TelegramClient;
|
||||
import it.tdlight.common.UpdatesHandler;
|
||||
|
||||
/**
|
||||
* Interface for interaction with TDLight.
|
||||
@ -13,17 +10,7 @@ public class ClientManager extends CommonClientManager {
|
||||
|
||||
private static final String implementationName = "tdlight";
|
||||
|
||||
public static TelegramClient create(
|
||||
ResultHandler updateHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
return CommonClientManager.create(implementationName, updateHandler, updateExceptionHandler, defaultExceptionHandler);
|
||||
}
|
||||
|
||||
public static TelegramClient create(
|
||||
UpdatesHandler updatesHandler,
|
||||
ExceptionHandler updateExceptionHandler,
|
||||
ExceptionHandler defaultExceptionHandler) {
|
||||
return CommonClientManager.create(implementationName, updatesHandler, updateExceptionHandler, defaultExceptionHandler);
|
||||
public static TelegramClient create() {
|
||||
return CommonClientManager.create(implementationName);
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>it.tdlight</groupId>
|
||||
<artifactId>tdlib-java</artifactId>
|
||||
<version>3.171.${revision}</version>
|
||||
<version>4.171.${revision}</version>
|
||||
<name>TDLib Java Wrapper</name>
|
||||
<packaging>jar</packaging>
|
||||
<properties>
|
||||
|
@ -2,7 +2,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>it.tdlight</groupId>
|
||||
<artifactId>tdlight-java</artifactId>
|
||||
<version>3.171.${revision}</version>
|
||||
<version>4.171.${revision}</version>
|
||||
<name>TDLight Java Wrapper</name>
|
||||
<packaging>jar</packaging>
|
||||
<properties>
|
||||
|
Loading…
Reference in New Issue
Block a user