away with abstraction
This commit is contained in:
parent
60a835fa35
commit
b53505f660
@ -1,20 +1,22 @@
|
|||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "../network.h"
|
#include "../network.h"
|
||||||
#include "../syncdataclient.h"
|
#include "../syncdata.h"
|
||||||
|
|
||||||
using namespace sync;
|
using namespace sync;
|
||||||
|
|
||||||
class ClientDevice : public Device
|
class ClientDevice : public Device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ClientDevice(SOCKET serverSocket, Timer &timer) : syncData(serverSocket), timer(timer) {}
|
ClientDevice(SOCKET serverSocket, Timer &timer) : serverSocket(serverSocket), timer(timer) {}
|
||||||
~ClientDevice();
|
~ClientDevice();
|
||||||
|
|
||||||
Track &getTrack(const std::string &trackName);
|
Track &getTrack(const std::string &trackName);
|
||||||
bool update(float row);
|
bool update(float row);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SyncDataClient syncData;
|
SyncData syncData;
|
||||||
|
SOCKET serverSocket;
|
||||||
|
|
||||||
Timer &timer;
|
Timer &timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -25,12 +27,74 @@ ClientDevice::~ClientDevice()
|
|||||||
|
|
||||||
Track &ClientDevice::getTrack(const std::string &trackName)
|
Track &ClientDevice::getTrack(const std::string &trackName)
|
||||||
{
|
{
|
||||||
return syncData.getTrack(trackName);
|
SyncData::TrackContainer::iterator iter = syncData.tracks.find(trackName);
|
||||||
|
if (iter != syncData.tracks.end()) return *syncData.actualTracks[iter->second];
|
||||||
|
|
||||||
|
unsigned char cmd = GET_TRACK;
|
||||||
|
send(serverSocket, (char*)&cmd, 1, 0);
|
||||||
|
|
||||||
|
size_t clientIndex = syncData.actualTracks.size();
|
||||||
|
send(serverSocket, (char*)&clientIndex, sizeof(size_t), 0);
|
||||||
|
|
||||||
|
// send request data
|
||||||
|
size_t name_len = trackName.size();
|
||||||
|
printf("len: %d\n", name_len);
|
||||||
|
send(serverSocket, (char*)&name_len, sizeof(size_t), 0);
|
||||||
|
|
||||||
|
const char *name_str = trackName.c_str();
|
||||||
|
send(serverSocket, name_str, name_len, 0);
|
||||||
|
|
||||||
|
sync::Track *track = new sync::Track();
|
||||||
|
/* todo: fill in based on the response */
|
||||||
|
|
||||||
|
syncData.actualTracks.push_back(track);
|
||||||
|
syncData.tracks[trackName] = clientIndex;
|
||||||
|
return *track;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClientDevice::update(float row)
|
bool ClientDevice::update(float row)
|
||||||
{
|
{
|
||||||
return !syncData.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;
|
||||||
}
|
}
|
||||||
|
|
||||||
Device *sync::createDevice(const std::string &baseName, Timer &timer)
|
Device *sync::createDevice(const std::string &baseName, Timer &timer)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
#include "track.h"
|
#include "track.h"
|
||||||
|
#include "../syncdata.h"
|
||||||
using namespace sync;
|
using namespace sync;
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|||||||
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <cassert>
|
||||||
|
#include <tchar.h>
|
||||||
|
|
||||||
#include "sync/track.h"
|
#include "sync/track.h"
|
||||||
|
|
||||||
|
|||||||
@ -1,74 +0,0 @@
|
|||||||
#include "syncdataclient.h"
|
|
||||||
#include "network.h"
|
|
||||||
|
|
||||||
sync::Track &SyncDataClient::getTrack(const std::basic_string<TCHAR> &name)
|
|
||||||
{
|
|
||||||
TrackContainer::iterator iter = tracks.find(name);
|
|
||||||
if (iter != tracks.end()) return *actualTracks[iter->second];
|
|
||||||
|
|
||||||
unsigned char cmd = GET_TRACK;
|
|
||||||
send(serverSocket, (char*)&cmd, 1, 0);
|
|
||||||
|
|
||||||
size_t clientIndex = actualTracks.size();
|
|
||||||
send(serverSocket, (char*)&clientIndex, sizeof(size_t), 0);
|
|
||||||
|
|
||||||
// send request data
|
|
||||||
size_t name_len = name.size();
|
|
||||||
printf("len: %d\n", name_len);
|
|
||||||
send(serverSocket, (char*)&name_len, sizeof(size_t), 0);
|
|
||||||
|
|
||||||
const char *name_str = name.c_str();
|
|
||||||
send(serverSocket, name_str, name_len, 0);
|
|
||||||
|
|
||||||
sync::Track *track = new sync::Track();
|
|
||||||
/* todo: fill in based on the response */
|
|
||||||
|
|
||||||
actualTracks.push_back(track);
|
|
||||||
tracks[name] = clientIndex;
|
|
||||||
return *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;
|
|
||||||
}
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
#include "network.h"
|
|
||||||
#include "syncdata.h"
|
|
||||||
|
|
||||||
class SyncDataClient : public SyncData
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SyncDataClient(SOCKET serverSocket) : serverSocket(serverSocket) {}
|
|
||||||
|
|
||||||
sync::Track &getTrack(const std::basic_string<TCHAR> &name);
|
|
||||||
bool poll();
|
|
||||||
private:
|
|
||||||
std::map<int, sync::Track*> serverRemap;
|
|
||||||
SOCKET serverSocket;
|
|
||||||
};
|
|
||||||
Loading…
x
Reference in New Issue
Block a user