Skip to content

Instantly share code, notes, and snippets.

@jmoren
Created November 24, 2015 04:04
Show Gist options
  • Save jmoren/b1a73644f3ec98808686 to your computer and use it in GitHub Desktop.
Save jmoren/b1a73644f3ec98808686 to your computer and use it in GitHub Desktop.
Client read thread
DWORD WINAPI clientReadThreadHandler(LPVOID argument){
Client *client = (Client*)argument;
GameUpdate message;
int result; int total; int size;
char bufferSize[sizeof(int)] = { 0 };
char bufferE[sizeof(ElementStatus)] = { 0 };
char bufferP[sizeof(PlayerStatus)] = { 0 };
char bufferEn[sizeof(EntityStatus)] = { 0 };
while (1){
message.elements.clear();
message.players.clear();
message.entities.clear();
// read players
result = client->readMessage(bufferSize, sizeof(int));
total = int(*bufferSize);
for (size_t i = 0; i < total; i++){
result = client->readMessage(bufferP, sizeof(PlayerStatus));
if (result > 0){
PlayerStatus p;
p.deserialize(bufferP);
message.players.push_back(p);
}
memset(bufferP, 0, sizeof(bufferP));
}
// read elements
result = client->readMessage(bufferSize, sizeof(int));
total = int(*bufferSize);
for (size_t i = 0; i < total; i++){
result = client->readMessage(bufferE, sizeof(ElementStatus));
if (result > 0){
ElementStatus p;
p.deserialize(bufferE);
message.elements.push_back(p);
}
memset(bufferE, 0, sizeof(bufferE));
}
// read entities
result = client->readMessage(bufferSize, sizeof(int));
total = int(*bufferSize);
for (size_t i = 0; i < total; i++){
result = client->readMessage(bufferEn, sizeof(EntityStatus));
if (result > 0){
EntityStatus p;
p.deserialize(bufferEn);
message.entities.push_back(p);
}
memset(bufferEn, 0, sizeof(bufferEn));
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment