rocket/syncdataclient.cpp
2010-03-19 17:41:00 +01:00

69 lines
1.5 KiB
C++

#include "syncdataclient.h"
#include "network.h"
SyncTrack &SyncDataClient::getTrack(const std::basic_string<TCHAR> &name)
{
TrackContainer::iterator iter = tracks.find(name);
if (iter != tracks.end()) return iter->second;
unsigned char cmd = GET_TRACK;
send(serverSocket, (char*)&cmd, 1, 0);
// send request data
int name_len = name.size();
printf("len: %d\n", name_len);
send(serverSocket, (char*)&name_len, sizeof(int), 0);
const char *name_str = name.c_str();
send(serverSocket, name_str, name_len, 0);
SyncTrack track = SyncTrack();
/* todo: fill in based on the response */
return tracks[name] = track;
}
bool SyncDataClient::poll()
{
bool done = false;
// look for new commands
while (pollRead(serverSocket))
{
unsigned char cmd = 0;
int ret = recv(serverSocket, (char*)&cmd, 1, 0);
if (0 == ret)
{
done = true;
break;
}
else
{
switch (cmd)
{
case SET_KEY:
{
int track, row;
float value;
recv(serverSocket, (char*)&track, sizeof(int), 0);
recv(serverSocket, (char*)&row, sizeof(int), 0);
recv(serverSocket, (char*)&value, sizeof(float), 0);
printf("set: %d,%d = %f\n", track, row, value);
}
break;
case DELETE_KEY:
{
int track, row;
recv(serverSocket, (char*)&track, sizeof(int), 0);
recv(serverSocket, (char*)&row, sizeof(int), 0);
printf("delete: %d,%d = %f\n", track, row);
}
break;
default:
printf("unknown cmd: %02x\n", cmd);
}
}
}
return done;
}