We need to check m_running separate from the server loop as well otherwise it just terminates after we check for a packet.

develop
Austin 2020-04-27 09:21:01 -07:00
parent 6231d1ab03
commit 5887f99a74
1 changed files with 37 additions and 31 deletions

View File

@ -70,57 +70,63 @@ Iris::~Iris() { enet_host_destroy(m_server); }
void Iris::run()
{
while (enet_host_service(m_server, &m_event, 50) > 0 && m_running)
while (m_running)
{
switch (m_event.type)
while (enet_host_service(m_server, &m_event, 50) > 0 && m_running)
{
case ENET_EVENT_TYPE_CONNECT:
printf("A new client connected from %x:%u.\n",
m_event.peer->address.host, m_event.peer->address.port);
switch (m_event.type)
{
auto entity = m_registry->create();
m_registry->emplace<User>(entity, "toby", m_event.peer);
m_event.peer->data = static_cast<void*>(&entity);
m_registry->emplace<Player>(
entity, ActorSystem::registerActor(m_registry));
}
break;
case ENET_EVENT_TYPE_CONNECT:
printf("A new client connected from %x:%u.\n",
m_event.peer->address.host, m_event.peer->address.port);
{
auto entity = m_registry->create();
m_registry->emplace<User>(entity, "toby", m_event.peer);
m_event.peer->data = static_cast<void*>(&entity);
m_registry->emplace<Player>(
entity, ActorSystem::registerActor(m_registry));
}
break;
case ENET_EVENT_TYPE_RECEIVE:
// printf ("A packet of length %u containing %s
// was received from %s on channel %u.\n",
// m_event.packet -> dataLength,
// m_event.packet -> data,
// m_event.peer -> data -> userName,
// m_event.channelID);
case ENET_EVENT_TYPE_RECEIVE:
// printf ("A packet of length %u containing %s
// was received from %s on channel %u.\n",
// m_event.packet -> dataLength,
// m_event.packet -> data,
// m_event.peer -> data -> userName,
// m_event.channelID);
switch (m_event.channelID)
{
case 0:
parseEvent(static_cast<entt::entity*>(m_event.peer->data),
m_event.packet->data, m_event.packet->dataLength);
m_event.packet->data,
m_event.packet->dataLength);
break;
case 1:
parseState(static_cast<entt::entity*>(m_event.peer->data),
m_event.packet->data, m_event.packet->dataLength);
m_event.packet->data,
m_event.packet->dataLength);
break;
case 2:
parseMessage(static_cast<entt::entity*>(m_event.peer->data),
m_event.packet->data, m_event.packet->dataLength);
m_event.packet->data,
m_event.packet->dataLength);
break;
}
/* Clean up the packet now that we're done using it. */
enet_packet_destroy(m_event.packet);
break;
/* Clean up the packet now that we're done using it. */
enet_packet_destroy(m_event.packet);
break;
case ENET_EVENT_TYPE_DISCONNECT:
printf("%s disconnected.\n",
static_cast<const char*>(m_event.peer->data));
break;
case ENET_EVENT_TYPE_DISCONNECT:
printf("%s disconnected.\n",
static_cast<const char*>(m_event.peer->data));
break;
case ENET_EVENT_TYPE_NONE:
break;
case ENET_EVENT_TYPE_NONE:
break;
}
}
}
}