72 lines
2.9 KiB
Java
72 lines
2.9 KiB
Java
package im.rosetta;
|
||
|
||
import im.rosetta.event.EventManager;
|
||
import im.rosetta.event.events.ConnectEvent;
|
||
import im.rosetta.event.events.DisconnectEvent;
|
||
import im.rosetta.event.events.PacketInputEvent;
|
||
import im.rosetta.event.events.ServerErrorEvent;
|
||
import im.rosetta.event.events.ServerStartEvent;
|
||
import im.rosetta.event.events.ServerStopEvent;
|
||
|
||
import io.orprotocol.Server;
|
||
import io.orprotocol.ServerListener;
|
||
import io.orprotocol.client.Client;
|
||
import io.orprotocol.packet.Packet;
|
||
|
||
/**
|
||
* Адаптер нужный для трансляции событий протокола в события приложения (EventManager)
|
||
*/
|
||
public class ServerAdapter implements ServerListener {
|
||
|
||
private EventManager eventManager;
|
||
|
||
public ServerAdapter(EventManager eventManager) {
|
||
this.eventManager = eventManager;
|
||
}
|
||
|
||
@Override
|
||
public void onServerStart(Server server) {
|
||
this.eventManager.callEvent(new ServerStartEvent(server));
|
||
}
|
||
|
||
@Override
|
||
public void onServerStop(Server server) {
|
||
this.eventManager.callEvent(new ServerStopEvent(server));
|
||
}
|
||
|
||
@Override
|
||
public boolean onClientConnect(Server server, Client client) {
|
||
boolean cancelled = this.eventManager.callEvent(new ConnectEvent(server, client));
|
||
/**
|
||
* Если событие отменено (true), то подключение клиента будет отклонено,
|
||
* иначе (false) клиент будет успешно подключен.
|
||
* Инверсия нужна для того чтобы соответствовать логике отмены событий в ServerListener,
|
||
* который требует чтобы мы возвращали true если подключение должно быть разрешено.
|
||
*/
|
||
return !cancelled;
|
||
}
|
||
|
||
@Override
|
||
public void onClientDisconnect(Server server, Client client) {
|
||
this.eventManager.callEvent(new DisconnectEvent(server, client));
|
||
}
|
||
|
||
@Override
|
||
public void onError(Server server, Exception exception) {
|
||
this.eventManager.callEvent(new ServerErrorEvent(server, exception));
|
||
}
|
||
|
||
@Override
|
||
public boolean onPacketReceived(Server server, Client client, Packet packet) {
|
||
boolean cancelled = this.eventManager.callEvent(new PacketInputEvent(server, client, packet));
|
||
/**
|
||
* Если событие отменено (true), то пакет не будет обработан дальше,
|
||
* иначе (false) будет продолжена его обработка.
|
||
* Инверсия нужна для того чтобы соответствовать логике отмены событий в ServerListener,
|
||
* который требует чтобы мы возвращали true если пакет должен быть обработан дальше.
|
||
*/
|
||
return !cancelled;
|
||
}
|
||
|
||
}
|