1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #include "server/GameServer.h"
- #include "common/network/Packets.h"
- #include "memory/UniquePointer.h"
- #include "server/Game.h"
- #include "utils/Logger.h"
- static Server* server = nullptr;
- static HashMap<int, UniquePointer<ServerPlayer>> players;
- struct Receiver {
- void onConnect(Server::Client& client) {
- if(players.tryEmplace(client.getId(), new ServerPlayer(client))) {
- LOG_WARNING(StringBuffer<50>("cannot emplace client id: ")
- .append(client.getId()));
- server->disconnect(client);
- return;
- }
- auto* p = players.search(client.getId());
- if(p == nullptr) {
- LOG_WARNING("cannot find added client");
- return;
- }
- Game::addPlayer(**p);
- }
- void onDisconnect(Server::Client& client) {
- auto* p = players.search(client.getId());
- if(p == nullptr) {
- LOG_WARNING("disconnecting missing player");
- return;
- }
- Game::removePlayer(**p);
- players.remove(client.getId());
- }
- void onPacket(Server::Client& client, InPacket& in) {
- auto* p = players.search(client.getId());
- if(p == nullptr) {
- LOG_WARNING("packet from missing player");
- return;
- }
- uint16 id;
- if(in.readU16(id)) {
- LOG_WARNING("invalid packet from client");
- return;
- }
- switch(id) {
- case C_CHAT: (*p)->onChat(in); break;
- default: LOG_WARNING("invalid packet from client");
- }
- }
- };
- void GameServer::init(Server* s) {
- server = s;
- }
- void GameServer::tick() {
- Receiver r;
- server->consumeEvents(r);
- }
- void GameServer::sendToAll(OutPacket& out) {
- server->send(out);
- }
|