215 lines
9.9 KiB
Java
215 lines
9.9 KiB
Java
package im.rosetta;
|
||
|
||
import im.rosetta.client.ClientManager;
|
||
import im.rosetta.client.OnlineManager;
|
||
import im.rosetta.event.EventManager;
|
||
import im.rosetta.executors.Executor0Handshake;
|
||
import im.rosetta.executors.Executor10RequestUpdate;
|
||
import im.rosetta.executors.Executor11Typeing;
|
||
import im.rosetta.executors.Executor15RequestTransport;
|
||
import im.rosetta.executors.Executor16PushNotification;
|
||
import im.rosetta.executors.Executor17GroupCreate;
|
||
import im.rosetta.executors.Executor18GroupInfo;
|
||
import im.rosetta.executors.Executor19GroupInviteInfo;
|
||
import im.rosetta.executors.Executor1UserInfo;
|
||
import im.rosetta.executors.Executor20GroupJoin;
|
||
import im.rosetta.executors.Executor21GroupLeave;
|
||
import im.rosetta.executors.Executor22GroupBan;
|
||
import im.rosetta.executors.Executor24DeviceResolve;
|
||
import im.rosetta.executors.Executor25Sync;
|
||
import im.rosetta.executors.Executor3Search;
|
||
import im.rosetta.executors.Executor4OnlineState;
|
||
import im.rosetta.executors.Executor6Message;
|
||
import im.rosetta.executors.Executor7Read;
|
||
import im.rosetta.listeners.DeviceListListener;
|
||
import im.rosetta.listeners.HandshakeCompleteListener;
|
||
import im.rosetta.listeners.OnlineStatusDisconnectListener;
|
||
import im.rosetta.listeners.OnlineStatusHandshakeCompleteListener;
|
||
import im.rosetta.listeners.ServerStopListener;
|
||
import im.rosetta.logger.Logger;
|
||
import im.rosetta.logger.enums.Color;
|
||
import im.rosetta.logger.enums.LogLevel;
|
||
import im.rosetta.packet.Packet0Handshake;
|
||
import im.rosetta.packet.Packet10RequestUpdate;
|
||
import im.rosetta.packet.Packet11Typeing;
|
||
import im.rosetta.packet.Packet15RequestTransport;
|
||
import im.rosetta.packet.Packet16PushNotification;
|
||
import im.rosetta.packet.Packet17GroupCreate;
|
||
import im.rosetta.packet.Packet18GroupInfo;
|
||
import im.rosetta.packet.Packet19GroupInviteInfo;
|
||
import im.rosetta.packet.Packet1UserInfo;
|
||
import im.rosetta.packet.Packet20GroupJoin;
|
||
import im.rosetta.packet.Packet21GroupLeave;
|
||
import im.rosetta.packet.Packet22GroupBan;
|
||
import im.rosetta.packet.Packet23DeviceList;
|
||
import im.rosetta.packet.Packet24DeviceResolve;
|
||
import im.rosetta.packet.Packet25Sync;
|
||
import im.rosetta.packet.Packet2Result;
|
||
import im.rosetta.packet.Packet3Search;
|
||
import im.rosetta.packet.Packet4OnlineSubscribe;
|
||
import im.rosetta.packet.Packet5OnlineState;
|
||
import im.rosetta.packet.Packet6Message;
|
||
import im.rosetta.packet.Packet7Read;
|
||
import im.rosetta.packet.Packet8Delivery;
|
||
import im.rosetta.packet.Packet9DeviceNew;
|
||
|
||
import io.orprotocol.Server;
|
||
import io.orprotocol.Settings;
|
||
import io.orprotocol.packet.PacketManager;
|
||
|
||
/**
|
||
* Boot отвечает за инициализацию всех пакетов и их обработчиков,
|
||
* а так же событий приложения. Этот Boot отвечает за приложение, а не за протокол.
|
||
*
|
||
* Нужен он для того, чтобы все части приложения получали одинаковые ссылки на глобальные обьекты приложения, такие как менеджер пакетов,
|
||
* менеджер событий, менеджер клиентов и так далее
|
||
*/
|
||
public class Boot {
|
||
|
||
private PacketManager packetManager;
|
||
private EventManager eventManager;
|
||
private Logger logger;
|
||
private Server server;
|
||
private ServerAdapter serverAdapter;
|
||
private ClientManager clientManager;
|
||
private OnlineManager onlineManager;
|
||
|
||
/**
|
||
* Конструктор по умолчанию, использует порт 3000 для сервера
|
||
*/
|
||
public Boot() {
|
||
this(3000);
|
||
}
|
||
|
||
/**
|
||
* Инициализатор приложения
|
||
* @param port Порт, на котором будет работать сервер. Если не указан, то будет использован порт 3000
|
||
*/
|
||
public Boot(int port) {
|
||
this.packetManager = new PacketManager();
|
||
this.eventManager = new EventManager();
|
||
this.onlineManager = new OnlineManager();
|
||
this.logger = new Logger(LogLevel.INFO);
|
||
this.serverAdapter = new ServerAdapter(this.eventManager);
|
||
this.server = new Server(new Settings(
|
||
port,
|
||
30
|
||
), packetManager, this.serverAdapter);
|
||
this.clientManager = new ClientManager(server);
|
||
}
|
||
|
||
/**
|
||
* Получить менеджер пакетов приложения
|
||
* @return PacketManager
|
||
*/
|
||
public PacketManager getPacketManager() {
|
||
return this.packetManager;
|
||
}
|
||
|
||
/**
|
||
* Получить менеджер событий приложения
|
||
* @return EventManager
|
||
*/
|
||
public EventManager getEventManager() {
|
||
return this.eventManager;
|
||
}
|
||
|
||
/**
|
||
* Получить менеджера клиентов, нужно для того чтобы отправить пакет списку клиентов например
|
||
* @return менеджер клиентов
|
||
*/
|
||
public ClientManager getClientManager() {
|
||
return this.clientManager;
|
||
}
|
||
|
||
/**
|
||
* Получить логгер приложения
|
||
* @return Logger
|
||
*/
|
||
public Logger getLogger() {
|
||
return this.logger;
|
||
}
|
||
|
||
/**
|
||
* Запуск сервера, регистрация пакетов, обработчиков, событий приложения
|
||
* @return Boot
|
||
*/
|
||
public Boot bootstrap() {
|
||
try{
|
||
this.server.start();
|
||
this.registerAllPackets();
|
||
this.registerAllExecutors();
|
||
this.registerAllEvents();
|
||
this.printBootMessage();
|
||
return this;
|
||
}catch(Exception e){
|
||
this.logger.error(Color.RED + "Booting error, stack trace:");
|
||
e.printStackTrace();
|
||
return null;
|
||
}
|
||
}
|
||
|
||
private void registerAllEvents() {
|
||
this.eventManager.registerListener(new ServerStopListener(this.logger));
|
||
this.eventManager.registerListener(new HandshakeCompleteListener());
|
||
this.eventManager.registerListener(new OnlineStatusHandshakeCompleteListener(this.onlineManager));
|
||
this.eventManager.registerListener(new OnlineStatusDisconnectListener(this.onlineManager, this.clientManager));
|
||
this.eventManager.registerListener(new DeviceListListener(this.clientManager));
|
||
}
|
||
|
||
private void registerAllPackets() {
|
||
this.packetManager.registerPacket(0, Packet0Handshake.class);
|
||
this.packetManager.registerPacket(1, Packet1UserInfo.class);
|
||
this.packetManager.registerPacket(2, Packet2Result.class);
|
||
this.packetManager.registerPacket(3, Packet3Search.class);
|
||
this.packetManager.registerPacket(4, Packet4OnlineSubscribe.class);
|
||
this.packetManager.registerPacket(5, Packet5OnlineState.class);
|
||
this.packetManager.registerPacket(6, Packet6Message.class);
|
||
this.packetManager.registerPacket(7, Packet7Read.class);
|
||
this.packetManager.registerPacket(8, Packet8Delivery.class);
|
||
this.packetManager.registerPacket(9, Packet9DeviceNew.class);
|
||
this.packetManager.registerPacket(10, Packet10RequestUpdate.class);
|
||
this.packetManager.registerPacket(11, Packet11Typeing.class);
|
||
//RESERVED 12 PACKET AVATAR (unused)
|
||
//RESERVED 13 PACKET KERNEL UPDATE (unused)
|
||
//RESERVED 14 PACKET APP UPDATE (unused)
|
||
this.packetManager.registerPacket(15, Packet15RequestTransport.class);
|
||
this.packetManager.registerPacket(16, Packet16PushNotification.class);
|
||
this.packetManager.registerPacket(17, Packet17GroupCreate.class);
|
||
this.packetManager.registerPacket(18, Packet18GroupInfo.class);
|
||
this.packetManager.registerPacket(19, Packet19GroupInviteInfo.class);
|
||
this.packetManager.registerPacket(20, Packet20GroupJoin.class);
|
||
this.packetManager.registerPacket(21, Packet21GroupLeave.class);
|
||
this.packetManager.registerPacket(22, Packet22GroupBan.class);
|
||
this.packetManager.registerPacket(23, Packet23DeviceList.class);
|
||
this.packetManager.registerPacket(24, Packet24DeviceResolve.class);
|
||
this.packetManager.registerPacket(25, Packet25Sync.class);
|
||
}
|
||
|
||
private void registerAllExecutors() {
|
||
this.packetManager.registerExecutor(0, new Executor0Handshake(this.eventManager, this.clientManager, this.packetManager));
|
||
this.packetManager.registerExecutor(1, new Executor1UserInfo());
|
||
this.packetManager.registerExecutor(3, new Executor3Search(this.clientManager));
|
||
this.packetManager.registerExecutor(4, new Executor4OnlineState(this.onlineManager, this.clientManager));
|
||
this.packetManager.registerExecutor(6, new Executor6Message(this.clientManager, this.packetManager));
|
||
this.packetManager.registerExecutor(7, new Executor7Read(this.clientManager, this.packetManager));
|
||
this.packetManager.registerExecutor(10, new Executor10RequestUpdate());
|
||
this.packetManager.registerExecutor(11, new Executor11Typeing(this.clientManager, this.packetManager));
|
||
this.packetManager.registerExecutor(15, new Executor15RequestTransport());
|
||
this.packetManager.registerExecutor(16, new Executor16PushNotification());
|
||
this.packetManager.registerExecutor(17, new Executor17GroupCreate());
|
||
this.packetManager.registerExecutor(18, new Executor18GroupInfo());
|
||
this.packetManager.registerExecutor(19, new Executor19GroupInviteInfo());
|
||
this.packetManager.registerExecutor(20, new Executor20GroupJoin(this.packetManager));
|
||
this.packetManager.registerExecutor(21, new Executor21GroupLeave());
|
||
this.packetManager.registerExecutor(22, new Executor22GroupBan());
|
||
this.packetManager.registerExecutor(24, new Executor24DeviceResolve(this.clientManager, this.eventManager, this.packetManager));
|
||
this.packetManager.registerExecutor(25, new Executor25Sync(this.packetManager));
|
||
}
|
||
|
||
private void printBootMessage() {
|
||
this.logger.log(LogLevel.INFO, Color.GREEN + "Boot successful complete");
|
||
}
|
||
|
||
}
|