Minor refactoring, only send joystick data on changes

This commit is contained in:
simon.kagstrom 2009-01-30 15:37:15 +00:00
parent 5a0941ff7e
commit 47f73f2b83
4 changed files with 23 additions and 12 deletions

View File

@ -616,6 +616,8 @@ void C64::network_vblank()
}
}
else if (this->network_client) {
Uint8 js = TheCIA1->Joystick2;
if (this->quit_thyself)
{
this->network_client->Disconnect();
@ -624,10 +626,15 @@ void C64::network_vblank()
return;
}
this->network_client->EncodeJoystickUpdate(TheCIA1->Joystick2);
this->network_client->SendUpdate();
/* Perhaps send joystick data */
if (this->network_client->cur_joystick_data != js)
{
this->network_client->EncodeJoystickUpdate(js);
this->network_client->SendUpdate();
this->network_client->cur_joystick_data = js;
}
if (this->network_client->ReceiveUpdateBlock())
if (this->network_client->ReceiveUpdate())
{
/* Got something? */
if (this->network_client->DecodeUpdate(this->network_client->screen) == true)

View File

@ -633,10 +633,8 @@ void NetworkServer::RemoveClient(NetworkClient *client)
/* Not found */
}
NetworkClient::NetworkClient(int sock) : Network()
void NetworkClient::Init()
{
this->sock = sock;
this->screen = (Uint8 *)malloc(DISPLAY_X * DISPLAY_Y);
assert(this->screen);
@ -644,6 +642,13 @@ NetworkClient::NetworkClient(int sock) : Network()
memset(this->screen, 0, DISPLAY_X * DISPLAY_Y);
}
NetworkClient::NetworkClient(int sock)
{
this->Init();
this->sock = sock;
}
NetworkClient::~NetworkClient()
{
free(this->screen);

View File

@ -210,7 +210,10 @@ public:
Uint8 *screen;
int joystick_port;
Uint8 cur_joystick_data;
private:
void Init();
int sock;
};

View File

@ -124,6 +124,8 @@ NetworkClient::NetworkClient(const char *hostname, int port)
/* Again from glibc docs */
struct sockaddr_in servername;
this->Init();
/* Create the socket. */
this->sock = socket (PF_INET, SOCK_STREAM, 0);
if (this->sock < 0)
@ -142,12 +144,6 @@ NetworkClient::NetworkClient(const char *hostname, int port)
perror ("connect (client)");
return;
}
this->screen = (Uint8 *)malloc(DISPLAY_X * DISPLAY_Y);
assert(this->screen);
/* Assume black screen */
memset(this->screen, 0, DISPLAY_X * DISPLAY_Y);
}
bool Network::ReceiveData(void *dst, int sock, size_t sz)