void NetManager::update() { mTick++; ENetEvent event; while(enet_host_service(mHost, &event, 0)) { switch(event.type) { case ENET_EVENT_TYPE_CONNECT: { if(mIsServer) { spawnPlayer(event.peer->connectID); mClients.push_back(event.peer); } break; } case ENET_EVENT_TYPE_RECEIVE: { if(mIsServer) readClientPacket(event); else readServerPacket(event); break; } default: { break; } } } if(mIsServer && mClients.size() > 0) sendServerPacket(); else if(mServerPeer != NULL) sendClientPacket(); enet_host_flush(mHost); }
void NetManager::update() { mTick++; ENetEvent event; // TODO: remove this block when we handle level switching properly auto player = FAWorld::World::get()->getCurrentPlayer(); if(player->getLevel()) mLevelIndexTmp = player->getLevel()->getLevelIndex(); else mLevelIndexTmp = -1; while(enet_host_service(mHost, &event, 0)) { switch(event.type) { case ENET_EVENT_TYPE_CONNECT: { if(mIsServer) { auto player = spawnPlayer(-1); // send the client its player id auto packet = enet_packet_create(NULL, sizeof(size_t), ENET_PACKET_FLAG_RELIABLE); size_t position = 0; writeToPacket(packet, position, player->getId()); enet_peer_send(event.peer, RELIABLE_CHANNEL_ID, packet); sendLevel(0, event.peer); sendLevel(1, event.peer); mClients.push_back(event.peer); mServerPlayerList[event.peer->connectID] = player; } break; } case ENET_EVENT_TYPE_RECEIVE: { if(mIsServer) readClientPacket(event); else readServerPacket(event); break; } default: { break; } } } if(mIsServer && mClients.size() > 0) sendServerPacket(); else if(mServerPeer != NULL) sendClientPacket(); enet_host_flush(mHost); }