à tester
This commit is contained in:
parent
dd2396e5e4
commit
9b4defba2a
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
Connection::Connection(SOCKET sock,
|
Connection::Connection(SOCKET sock,
|
||||||
sockaddr_in sockaddr,
|
sockaddr_in sockaddr,
|
||||||
netprot::LoginInfo log,
|
LoginInfo log,
|
||||||
netprot::PlayerInfo play):
|
PlayerInfo play):
|
||||||
m_sock(sock),
|
m_sock(sock),
|
||||||
m_addr(sockaddr),
|
m_addr(sockaddr),
|
||||||
m_loginfo(log),
|
m_loginfo(log),
|
||||||
@ -13,9 +13,7 @@ Connection::Connection(SOCKET sock,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Connection::~Connection() {
|
Connection::~Connection() { closesocket(m_sock); }
|
||||||
closesocket(m_sock);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint64_t Connection::GetHash(bool self) const { return self? m_loginfo.sid: m_playinfo.id; }
|
uint64_t Connection::GetHash(bool self) const { return self? m_loginfo.sid: m_playinfo.id; }
|
||||||
|
|
||||||
@ -23,19 +21,17 @@ uint64_t Connection::GetTeamHash() const { return m_loginfo.tid; }
|
|||||||
|
|
||||||
std::string Connection::GetName() const { return m_loginfo.name; }
|
std::string Connection::GetName() const { return m_loginfo.name; }
|
||||||
|
|
||||||
void Connection::AddInput(netprot::Input in) {
|
void Connection::AddInput(Input in) { m_input_manifest.insert({ in.timestamp, in }); }
|
||||||
m_input_manifest.insert({ in.timestamp, in });
|
|
||||||
}
|
|
||||||
|
|
||||||
netprot::Output* Connection::getOutput(Timestamp time) {
|
Output* Connection::getOutput(Timestamp time) {
|
||||||
auto out = m_output_manifest.find(time);
|
auto out = m_output_manifest.find(time);
|
||||||
if (out != m_output_manifest.end())
|
if (out != m_output_manifest.end())
|
||||||
return &out->second;
|
return &out->second;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
netprot::Sync Connection::getSync(Timestamp time) {
|
Sync Connection::getSync(Timestamp time) {
|
||||||
netprot::Sync sync;
|
Sync sync;
|
||||||
auto out = m_output_manifest.find(time);
|
auto out = m_output_manifest.find(time);
|
||||||
if (out != m_output_manifest.end()) {
|
if (out != m_output_manifest.end()) {
|
||||||
sync.timestamp = out->second.timestamp;
|
sync.timestamp = out->second.timestamp;
|
||||||
@ -45,10 +41,13 @@ netprot::Sync Connection::getSync(Timestamp time) {
|
|||||||
return sync;
|
return sync;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SOCKET Connection::getSock() const { return m_sock; }
|
||||||
|
|
||||||
|
PlayerInfo* Connection::getInfo() const { return (PlayerInfo*)&m_playinfo; }
|
||||||
|
|
||||||
void Connection::CleanInputManifest(Timestamp time) {
|
void Connection::CleanInputManifest(Timestamp time) {
|
||||||
auto wat = m_input_manifest.find(time);
|
auto wat = m_input_manifest.find(time);
|
||||||
|
|
||||||
while (wat != m_input_manifest.begin())
|
while (wat != m_input_manifest.begin())
|
||||||
m_input_manifest.erase(wat--);
|
m_input_manifest.erase(wat--);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -8,13 +8,15 @@
|
|||||||
#include "../SQCSim-common/netprotocol.h"
|
#include "../SQCSim-common/netprotocol.h"
|
||||||
#include "define.h"
|
#include "define.h"
|
||||||
|
|
||||||
|
using namespace netprot;
|
||||||
|
|
||||||
class Connection {
|
class Connection {
|
||||||
public:
|
public:
|
||||||
Connection(
|
Connection(
|
||||||
SOCKET sock,
|
SOCKET sock,
|
||||||
sockaddr_in sockaddr,
|
sockaddr_in sockaddr,
|
||||||
netprot::LoginInfo log,
|
LoginInfo log,
|
||||||
netprot::PlayerInfo play);
|
PlayerInfo play);
|
||||||
~Connection();
|
~Connection();
|
||||||
|
|
||||||
Player* player = nullptr;
|
Player* player = nullptr;
|
||||||
@ -23,20 +25,22 @@ public:
|
|||||||
uint64_t GetTeamHash() const;
|
uint64_t GetTeamHash() const;
|
||||||
std::string GetName() const;
|
std::string GetName() const;
|
||||||
|
|
||||||
void AddInput(netprot::Input in);
|
void AddInput(Input in);
|
||||||
netprot::Output* getOutput(Timestamp time);
|
Output* getOutput(Timestamp time);
|
||||||
netprot::Sync getSync(Timestamp time);
|
Sync getSync(Timestamp time);
|
||||||
|
SOCKET getSock() const;
|
||||||
|
PlayerInfo* getInfo() const;
|
||||||
|
|
||||||
void CleanInputManifest(Timestamp time);
|
void CleanInputManifest(Timestamp time);
|
||||||
private:
|
private:
|
||||||
std::map<Timestamp, netprot::Input> m_input_manifest;
|
std::map<Timestamp, Input> m_input_manifest;
|
||||||
std::map<Timestamp, netprot::Output> m_output_manifest;
|
std::map<Timestamp, Output> m_output_manifest;
|
||||||
std::map<Timestamp, netprot::Chat> m_chatlog;
|
std::map<Timestamp, Chat> m_chatlog;
|
||||||
|
|
||||||
SOCKET m_sock;
|
SOCKET m_sock;
|
||||||
sockaddr_in m_addr;
|
sockaddr_in m_addr;
|
||||||
netprot::LoginInfo m_loginfo;
|
LoginInfo m_loginfo;
|
||||||
netprot::PlayerInfo m_playinfo;
|
PlayerInfo m_playinfo;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
@ -114,45 +114,49 @@ int Server::Ready() {
|
|||||||
str.append(inet_ntop(AF_INET, &sockad.sin_addr, strbuf, strbuflen)).append(": ").append(std::to_string(sockad.sin_port));
|
str.append(inet_ntop(AF_INET, &sockad.sin_addr, strbuf, strbuflen)).append(": ").append(std::to_string(sockad.sin_port));
|
||||||
|
|
||||||
if (recv(sock, buf, buflen, 0) > 0) {
|
if (recv(sock, buf, buflen, 0) > 0) {
|
||||||
netprot::LoginInfo* log;
|
LoginInfo* log;
|
||||||
netprot::PlayerInfo play;
|
PlayerInfo play;
|
||||||
|
|
||||||
netprot::Packet pck = netprot::getPack(buf, buflen);
|
Packet pck = getPack(buf, buflen);
|
||||||
if (pck.type != netprot::PACKET_TYPE::LOGINF) {
|
if (pck.type != PACKET_TYPE::LOGINF) {
|
||||||
if (pck.type != netprot::PACKET_TYPE::ERR)
|
Log("Paquet invalide.", true, false);
|
||||||
netprot::emptyPack(pck);
|
if (pck.type != PACKET_TYPE::ERR)
|
||||||
continue;
|
emptyPack(pck);
|
||||||
|
continue; // Passer au prochain appel si c'est pas un LoginInfo ou un LoginInfo invalide qui rentre.
|
||||||
}
|
}
|
||||||
log = (netprot::LoginInfo*)pck.ptr;
|
log = (LoginInfo*)pck.ptr;
|
||||||
|
|
||||||
log->sid = getUniqueId();
|
log->sid = getUniqueId();
|
||||||
log->tid = 0;
|
log->tid = 0;
|
||||||
|
|
||||||
str.append(" Nom: ").append(log->name);
|
Log(str.append(" Nom: ").append(log->name), false, false);
|
||||||
Log(str, false, false);
|
str.clear();
|
||||||
str = "";
|
|
||||||
|
|
||||||
str.append(log->name).append(" SID: [").append(std::to_string(log->sid).append("]"));
|
Log(str.append(log->name).append(" SID: [").append(std::to_string(log->sid).append("]")), false, false);
|
||||||
Log(str, false, false);
|
|
||||||
|
|
||||||
netprot::sendPack<netprot::LoginInfo>(sock, log, &buf, &buflen);
|
|
||||||
|
|
||||||
|
sendPack<LoginInfo>(sock, log, &buf, &buflen);
|
||||||
|
|
||||||
play.id = getUniqueId();
|
play.id = getUniqueId();
|
||||||
memcpy(play.name, log->name, std::strlen(log->name) + 1);
|
strcpy_s(play.name, log->name);
|
||||||
|
|
||||||
play.tid = log->tid;
|
play.tid = log->tid;
|
||||||
|
|
||||||
netprot::sendPack<netprot::GameInfo>(sock, &m_game, &buf, &buflen);
|
sendPack<GameInfo>(sock, &m_game, &buf, &buflen);
|
||||||
Connection* conn = new Connection(sock, sockad, *log, play);
|
Connection* conn = new Connection(sock, sockad, *log, play);
|
||||||
|
|
||||||
// TODO: Envoyer les infos de joueur distant aux joueurs déjà connectés
|
for (auto& player : m_players) {
|
||||||
// et envoyer les infos des joueurs distants au nouveau joueur.
|
sendPack<PlayerInfo>(player.second->getSock(), &play, &buf, &buflen); // Envoyer les infos de joueur distant aux joueurs déjà connectés
|
||||||
|
buflen = BUFFER_LENGTH;
|
||||||
|
sendPack<PlayerInfo>(sock, player.second->getInfo(), &buf, &buflen); // et envoyer les infos des joueurs distants au nouveau joueur.
|
||||||
|
buflen = BUFFER_LENGTH;
|
||||||
|
}
|
||||||
|
|
||||||
m_players[log->sid] = conn;
|
m_players[log->sid] = conn;
|
||||||
|
|
||||||
delete log; // le pck va se supprimer tout seul, mais le pointer du log qui vient de lui, non.
|
delete log; // le pck va se supprimer tout seul, mais le pointer du log qui vient de lui, non.
|
||||||
|
|
||||||
if (++nbrconn >= nbrjoueurs)
|
if (++nbrconn >= nbrjoueurs)
|
||||||
readystart = true;
|
readystart = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,12 +170,12 @@ void Server::Run() {
|
|||||||
sockaddr_in sockad;
|
sockaddr_in sockad;
|
||||||
int socklen = sizeof(sockad);
|
int socklen = sizeof(sockad);
|
||||||
|
|
||||||
Log("Partie en cours...", false, false);
|
Log("Debut de la partie...", false, false);
|
||||||
|
|
||||||
for (auto& conn : m_players) // Gérer le point de spawn des joueurs.
|
for (auto& conn : m_players) // Gérer le point de spawn des joueurs.
|
||||||
conn.second->player = new Player(Vector3f(64., 128., 64.));
|
conn.second->player = new Player(Vector3f(64., 128., 64.));
|
||||||
|
|
||||||
// TODO: Faire un premier sync pour que le joueur parte à la bonne place.
|
// TODO: Faire un premier sync pour que les joueurs partent à la bonne place.
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (recvfrom(m_sock_udp, buf, BUFFER_LENGTH, 0, (sockaddr*)&sockad, &socklen) > 0) {
|
if (recvfrom(m_sock_udp, buf, BUFFER_LENGTH, 0, (sockaddr*)&sockad, &socklen) > 0) {
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
#include "define.h"
|
#include "define.h"
|
||||||
#include "connection.h"
|
#include "connection.h"
|
||||||
|
|
||||||
|
using namespace netprot;
|
||||||
|
|
||||||
class Server {
|
class Server {
|
||||||
public:
|
public:
|
||||||
Server(LogDest log = LOG_DEST::CONSOLE);
|
Server(LogDest log = LOG_DEST::CONSOLE);
|
||||||
|
@ -88,6 +88,9 @@ int Connector::Connect(const char* srv_addr, std::string name) {
|
|||||||
}
|
}
|
||||||
++rpack;
|
++rpack;
|
||||||
break;
|
break;
|
||||||
|
case netprot::PACKET_TYPE::PLAYINF:
|
||||||
|
// TODO: Populer un remotePlayer avec ça.
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
++errors;
|
++errors;
|
||||||
//std::cout << "Packet invalide." << std::endl;
|
//std::cout << "Packet invalide." << std::endl;
|
||||||
|
@ -32,7 +32,5 @@ private:
|
|||||||
netprot::LoginInfo m_loginfo;
|
netprot::LoginInfo m_loginfo;
|
||||||
netprot::GameInfo m_gameinfo;
|
netprot::GameInfo m_gameinfo;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user