Files
rosetta-wss/src/main/java/im/rosetta/ServerAdapter.java

72 lines
2.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}