Minor tweaks
This commit is contained in:
@@ -60,6 +60,7 @@ struct Disconnect {
|
|||||||
|
|
||||||
struct Synchronize {
|
struct Synchronize {
|
||||||
PacketList type = PacketList::SYNCHRONIZE;
|
PacketList type = PacketList::SYNCHRONIZE;
|
||||||
|
int playerID;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct NewPlayer {
|
struct NewPlayer {
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ void ServerApplication::HandleInput() {
|
|||||||
JoinRequest(&packet);
|
JoinRequest(&packet);
|
||||||
break;
|
break;
|
||||||
case PacketList::DISCONNECT:
|
case PacketList::DISCONNECT:
|
||||||
Disconnect(&packet);
|
Disconnect(packet.disconnect.playerID);
|
||||||
break;
|
break;
|
||||||
case PacketList::MOVEMENT:
|
case PacketList::MOVEMENT:
|
||||||
Movement(&packet);
|
Movement(&packet);
|
||||||
@@ -75,6 +75,9 @@ void ServerApplication::HandleOutput() {
|
|||||||
//-------------------------
|
//-------------------------
|
||||||
|
|
||||||
void ServerApplication::Ping(PacketData* packet) {
|
void ServerApplication::Ping(PacketData* packet) {
|
||||||
|
if (!packet) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
//respond to pings with the server name
|
//respond to pings with the server name
|
||||||
packet->type = PacketList::PONG;
|
packet->type = PacketList::PONG;
|
||||||
sprintf(packet->pong.metadata, "%s",configUtil.CString("servername"));
|
sprintf(packet->pong.metadata, "%s",configUtil.CString("servername"));
|
||||||
@@ -82,40 +85,54 @@ void ServerApplication::Ping(PacketData* packet) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::JoinRequest(PacketData* packet) {
|
void ServerApplication::JoinRequest(PacketData* packet) {
|
||||||
//TODO
|
if (!packet || clientMap.size() >= maxClients) {
|
||||||
cout << "Join request..." << endl;
|
|
||||||
if (clientMap.size() >= maxClients) {
|
|
||||||
//rejection
|
//rejection
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//add the player
|
||||||
int playerID = uniqueIndex++;
|
int playerID = uniqueIndex++;
|
||||||
clientMap[playerID].playerID = playerID;
|
clientMap[playerID].playerID = playerID;
|
||||||
clientMap[playerID].channel = netUtil.Bind(&netUtil.GetInPacket()->address, -1);
|
clientMap[playerID].channel = netUtil.Bind(&netUtil.GetInPacket()->address, -1);
|
||||||
clientMap[playerID].handle = packet->joinRequest.handle;
|
clientMap[playerID].handle = packet->joinRequest.handle;
|
||||||
clientMap[playerID].avatar = packet->joinRequest.avatar;
|
clientMap[playerID].avatar = packet->joinRequest.avatar;
|
||||||
|
cout << "New player: " << playerID << endl;
|
||||||
|
|
||||||
//debug
|
//debug
|
||||||
cout << "playerID: " << playerID << ", " << clientMap[playerID].playerID << endl;
|
#ifdef DEBUG
|
||||||
|
cout << "playerID: " << clientMap[playerID].playerID << endl;
|
||||||
cout << "channel: " << clientMap[playerID].channel << endl;
|
cout << "channel: " << clientMap[playerID].channel << endl;
|
||||||
cout << "handle: " << clientMap[playerID].handle << endl;
|
cout << "handle: " << clientMap[playerID].handle << endl;
|
||||||
cout << "avatar: " << clientMap[playerID].avatar << endl;
|
cout << "avatar: " << clientMap[playerID].avatar << endl;
|
||||||
|
#endif
|
||||||
|
|
||||||
//join confirm
|
//join confirm
|
||||||
PacketData jc;
|
PacketData p;
|
||||||
jc.type = PacketList::JOINCONFIRM;
|
p.type = PacketList::JOINCONFIRM;
|
||||||
jc.joinConfirm.playerID = clientMap[playerID].playerID;
|
p.joinConfirm.playerID = clientMap[playerID].playerID;
|
||||||
netUtil.Send(clientMap[playerID].channel, &jc, sizeof(PacketData));
|
netUtil.Send(clientMap[playerID].channel, &p, sizeof(PacketData));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::Disconnect(PacketData* packet) { //TODO: use playerID here
|
void ServerApplication::Disconnect(int playerID) {
|
||||||
//TODO: Delete player
|
//TODO: Delete player
|
||||||
int playerID = packet->disconnect.playerID;
|
if (clientMap.find(playerID) == clientMap.end()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
cout << "disconnecting: " << playerID << endl;
|
cout << "disconnecting: " << playerID << endl;
|
||||||
netUtil.Unbind(clientMap[playerID].channel);
|
netUtil.Unbind(clientMap[playerID].channel);
|
||||||
clientMap.erase(playerID);
|
clientMap.erase(playerID);
|
||||||
|
#ifdef DEBUG
|
||||||
cout << "current players: " << clientMap.size() << endl;
|
cout << "current players: " << clientMap.size() << endl;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerApplication::Movement(PacketData* packet) {
|
void ServerApplication::Movement(PacketData* packet) {
|
||||||
//TODO
|
if (!packet) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clientMap[packet->movement.playerID].position = packet->movement.position;
|
||||||
|
clientMap[packet->movement.playerID].motion = packet->movement.motion;
|
||||||
|
//simple relay
|
||||||
|
for (auto it : clientMap) {
|
||||||
|
netUtil.Send(it.second.channel, packet, sizeof(PacketData));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ private:
|
|||||||
//network commands
|
//network commands
|
||||||
void Ping(PacketData*);
|
void Ping(PacketData*);
|
||||||
void JoinRequest(PacketData*);
|
void JoinRequest(PacketData*);
|
||||||
void Disconnect(PacketData*);
|
void Disconnect(int playerID);
|
||||||
void Movement(PacketData*);
|
void Movement(PacketData*);
|
||||||
|
|
||||||
bool running = false;
|
bool running = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user