Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - KryQ

Pages: [1]
1
Network / Synchronous/asynchronous socket handling.
« on: April 15, 2015, 06:44:00 pm »
Hello everybody :P
Few months ago I started to play with SMFL and i decided to make RPG like game simply for learning purposes.
And just because i like the concept of MMO i wanted to use simple client<->server communication using TCP sockets.

But after some time (and few hundreds of poorly written lines of code) i ran into one major obstacle that i think i overcomed but not very nicely. Thats why i'm asking you mighty Greybeards for some guidance.

To the point.

In my main client thread i have functions like this (code is written from head but i hope You get the idea):

sf::Vector2f CInputHandler::sendCmdGetPos()
{
 listening = false;
 std::string cmd;
 sf::Vector2f pos

 if (socket.recieve(packet) == sf::Socket::Done)
 {
  packet >> cmd;
  if(cmd=="playerPos")
  {
   packet >> pos;
   listening = true;
   return pos;
  }
 }
}
 

And everything would be fine and dandy but i also have separate thread for asynch calls from server (something like player "Kupa" logged in)

void CInputHandler::listen()
{
 while (1)
 {
  if(listening)
  {
   socket.setBlocking(false);
   if (socket.recieve(packet) == sf::Socket::Done)
   {
    packet >> cmd;
    if(cmd=="playerLoggedIn")
    {
     packet >> name;
     printf(name)
    }
   }
  }
  socket.setBlocking(true);
 }
}
 

And well it works but seems like not really clean way to solve the problem. Maybe somebody have better way to solve this?

Thanks in advance for responds, KryQ

Pages: [1]
anything