#include "../geometry/distance.hpp"
#include "../io/WorldSave.hpp"
#include "../model/Model.hpp"
+#include "../shared/CommandService.hpp"
#include "../world/ChunkIndex.hpp"
#include "../world/Entity.hpp"
#include "../world/World.hpp"
NetworkCLIFeedback::NetworkCLIFeedback(Player &p, ClientConnection &c)
-: CLIContext(p)
+: CLIContext(&p)
, conn(c) {
}
, spawn_index(world.Chunks().MakeIndex(wc.spawn, 3))
, save(save)
, player_model(nullptr)
-, cli(world) {
+, cli(world)
+, cmd_srv() {
#pragma GCC diagnostic pop
if (!serv_set) {
throw NetError("SDLNet_AllocSocketSet");
serv_pack.data = new Uint8[sizeof(Packet)];
serv_pack.maxlen = sizeof(Packet);
+
+ if (conf.cmd_port) {
+ cmd_srv.reset(new CommandService(cli, conf.cmd_port));
+ }
}
Server::~Server() {
void Server::Wait(int dt) noexcept {
SDLNet_CheckSockets(serv_set, dt);
+ if (cmd_srv) {
+ cmd_srv->Wait(0);
+ }
}
bool Server::Ready() noexcept {
- return SDLNet_CheckSockets(serv_set, 0) > 0;
+ if (SDLNet_CheckSockets(serv_set, 0) > 0) {
+ return true;
+ }
+ return cmd_srv && cmd_srv->Ready();
}
void Server::Handle() {
// a boo boo happened
throw NetError("SDLNet_UDP_Recv");
}
+ if (cmd_srv) {
+ cmd_srv->Handle();
+ }
}
void Server::HandlePacket(const UDPpacket &udp_pack) {
++client;
}
}
+ if (cmd_srv) {
+ cmd_srv->Send();
+ }
}
void Server::SetPlayerModel(const Model &m) noexcept {