mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
parent
5d0b18a0d0
commit
c31b301722
@ -380,56 +380,48 @@ void Server::handleCommand_ClientReady(NetworkPacket* pkt)
|
|||||||
{
|
{
|
||||||
session_t peer_id = pkt->getPeerId();
|
session_t peer_id = pkt->getPeerId();
|
||||||
|
|
||||||
PlayerSAO* playersao = StageTwoClientInit(peer_id);
|
// decode all information first
|
||||||
|
u8 major_ver, minor_ver, patch_ver, reserved;
|
||||||
|
u16 formspec_ver = 1; // v1 for clients older than 5.1.0-dev
|
||||||
|
std::string full_ver;
|
||||||
|
|
||||||
if (playersao == NULL) {
|
*pkt >> major_ver >> minor_ver >> patch_ver >> reserved >> full_ver;
|
||||||
errorstream << "TOSERVER_CLIENT_READY stage 2 client init failed "
|
if (pkt->getRemainingBytes() >= 2)
|
||||||
|
*pkt >> formspec_ver;
|
||||||
|
|
||||||
|
m_clients.setClientVersion(peer_id, major_ver, minor_ver, patch_ver,
|
||||||
|
full_ver);
|
||||||
|
|
||||||
|
// Emerge player
|
||||||
|
PlayerSAO* playersao = StageTwoClientInit(peer_id);
|
||||||
|
if (!playersao) {
|
||||||
|
errorstream << "Server: stage 2 client init failed "
|
||||||
"peer_id=" << peer_id << std::endl;
|
"peer_id=" << peer_id << std::endl;
|
||||||
DisconnectPeer(peer_id);
|
DisconnectPeer(peer_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
playersao->getPlayer()->formspec_version = formspec_ver;
|
||||||
|
m_clients.event(peer_id, CSE_SetClientReady);
|
||||||
|
|
||||||
if (pkt->getSize() < 8) {
|
// Send player list to this client
|
||||||
errorstream << "TOSERVER_CLIENT_READY client sent inconsistent data, "
|
{
|
||||||
"disconnecting peer_id: " << peer_id << std::endl;
|
|
||||||
DisconnectPeer(peer_id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
u8 major_ver, minor_ver, patch_ver, reserved;
|
|
||||||
std::string full_ver;
|
|
||||||
*pkt >> major_ver >> minor_ver >> patch_ver >> reserved >> full_ver;
|
|
||||||
|
|
||||||
m_clients.setClientVersion(peer_id, major_ver, minor_ver, patch_ver,
|
|
||||||
full_ver);
|
|
||||||
|
|
||||||
if (pkt->getRemainingBytes() >= 2)
|
|
||||||
*pkt >> playersao->getPlayer()->formspec_version;
|
|
||||||
|
|
||||||
const std::vector<std::string> &players = m_clients.getPlayerNames();
|
const std::vector<std::string> &players = m_clients.getPlayerNames();
|
||||||
NetworkPacket list_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, peer_id);
|
NetworkPacket list_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, peer_id);
|
||||||
list_pkt << (u8) PLAYER_LIST_INIT << (u16) players.size();
|
list_pkt << (u8) PLAYER_LIST_INIT << (u16) players.size();
|
||||||
for (const std::string &player: players) {
|
for (const auto &player : players)
|
||||||
list_pkt << player;
|
list_pkt << player;
|
||||||
|
Send(peer_id, &list_pkt);
|
||||||
}
|
}
|
||||||
m_clients.send(peer_id, 0, &list_pkt, true);
|
|
||||||
|
|
||||||
NetworkPacket notice_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, PEER_ID_INEXISTENT);
|
|
||||||
// (u16) 1 + std::string represents a pseudo vector serialization representation
|
|
||||||
notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << std::string(playersao->getPlayer()->getName());
|
|
||||||
m_clients.sendToAll(¬ice_pkt);
|
|
||||||
m_clients.event(peer_id, CSE_SetClientReady);
|
|
||||||
|
|
||||||
s64 last_login;
|
s64 last_login;
|
||||||
m_script->getAuth(playersao->getPlayer()->getName(), nullptr, nullptr, &last_login);
|
m_script->getAuth(playersao->getPlayer()->getName(), nullptr, nullptr, &last_login);
|
||||||
m_script->on_joinplayer(playersao, last_login);
|
m_script->on_joinplayer(playersao, last_login);
|
||||||
|
|
||||||
// Send shutdown timer if shutdown has been scheduled
|
// Send shutdown timer if shutdown has been scheduled
|
||||||
if (m_shutdown_state.isTimerRunning()) {
|
if (m_shutdown_state.isTimerRunning())
|
||||||
SendChatMessage(peer_id, m_shutdown_state.getShutdownTimerMessage());
|
SendChatMessage(peer_id, m_shutdown_state.getShutdownTimerMessage());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void Server::handleCommand_GotBlocks(NetworkPacket* pkt)
|
void Server::handleCommand_GotBlocks(NetworkPacket* pkt)
|
||||||
{
|
{
|
||||||
|
@ -128,9 +128,7 @@ public:
|
|||||||
void setDirty(bool dirty) { m_dirty = true; }
|
void setDirty(bool dirty) { m_dirty = true; }
|
||||||
|
|
||||||
u16 protocol_version = 0;
|
u16 protocol_version = 0;
|
||||||
|
u16 formspec_version = 0;
|
||||||
// v1 for clients older than 5.1.0-dev
|
|
||||||
u16 formspec_version = 1;
|
|
||||||
|
|
||||||
session_t getPeerId() const { return m_peer_id; }
|
session_t getPeerId() const { return m_peer_id; }
|
||||||
|
|
||||||
|
@ -1104,19 +1104,20 @@ PlayerSAO* Server::StageTwoClientInit(session_t peer_id)
|
|||||||
SendPlayerBreath(playersao);
|
SendPlayerBreath(playersao);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Print out action
|
Update player list and print action
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
Address addr = getPeerAddress(player->getPeerId());
|
NetworkPacket notice_pkt(TOCLIENT_UPDATE_PLAYER_LIST, 0, PEER_ID_INEXISTENT);
|
||||||
std::string ip_str = addr.serializeString();
|
notice_pkt << (u8) PLAYER_LIST_ADD << (u16) 1 << std::string(player->getName());
|
||||||
const std::vector<std::string> &names = m_clients.getPlayerNames();
|
m_clients.sendToAll(¬ice_pkt);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
std::string ip_str = getPeerAddress(player->getPeerId()).serializeString();
|
||||||
|
const auto &names = m_clients.getPlayerNames();
|
||||||
|
|
||||||
actionstream << player->getName() << " [" << ip_str << "] joins game. List of players: ";
|
actionstream << player->getName() << " [" << ip_str << "] joins game. List of players: ";
|
||||||
|
for (const std::string &name : names)
|
||||||
for (const std::string &name : names) {
|
|
||||||
actionstream << name << " ";
|
actionstream << name << " ";
|
||||||
}
|
|
||||||
|
|
||||||
actionstream << player->getName() << std::endl;
|
actionstream << player->getName() << std::endl;
|
||||||
}
|
}
|
||||||
return playersao;
|
return playersao;
|
||||||
|
Loading…
Reference in New Issue
Block a user