yes, remote-stuff works! \o/

This commit is contained in:
Erik Faye-Lund 2008-02-15 02:00:28 +00:00
parent 4927f902d3
commit 59d30073f9
7 changed files with 63 additions and 8 deletions

View File

@ -36,16 +36,17 @@ public:
float getRow() float getRow()
{ {
if (!paused) return row++; float ret = row;
else return row; if (!paused) row += 0.5f;
return ret;
} }
void setRow(float row) { row = int(floor(row)); } void setRow(float row) { this->row = int(floor(row)); }
bool isPlaying() { return !paused; } bool isPlaying() { return !paused; }
private: private:
bool paused; bool paused;
int row; float row;
}; };
#endif #endif
@ -68,7 +69,7 @@ int main(int argc, char *argv[])
timer.play(); timer.play();
while (1) while (1)
{ {
float row = float(timer.getRow()) / 10; float row = float(timer.getRow());
if (!syncDevice->update(row)) break; if (!syncDevice->update(row)) break;
printf("%2.2f: %2.2f \n", row, track.getValue(row)); printf("%2.2f: %2.2f \n", row, track.getValue(row));

View File

@ -12,10 +12,18 @@ SOCKET serverConnect(struct sockaddr_in *addr);
bool pollRead(SOCKET socket); bool pollRead(SOCKET socket);
enum RemoteCommand { enum RemoteCommand {
// server -> client
SET_KEY = 0, SET_KEY = 0,
DELETE_KEY = 1, DELETE_KEY = 1,
// client -> server
GET_TRACK = 2, GET_TRACK = 2,
// client -> server, server -> client
SET_ROW = 3, SET_ROW = 3,
// server -> client
PAUSE = 4,
}; };
#endif /* NETWORK_H */ #endif /* NETWORK_H */

View File

@ -102,6 +102,25 @@ bool ClientDevice::update(float row)
} }
break; break;
case SET_ROW:
{
int row;
recv(serverSocket, (char*)&row, sizeof(int), 0);
printf("set row: %d\n", row);
timer.setRow(float(row));
}
break;
case PAUSE:
{
char flag;
recv(serverSocket, (char*)&flag, 1, 0);
printf("pause: %d\n", flag);
if (flag == 0) timer.play();
else timer.pause();
}
break;
default: default:
printf("unknown cmd: %02x\n", cmd); printf("unknown cmd: %02x\n", cmd);
} }

View File

@ -9,7 +9,7 @@
class SyncEditData : public sync::Data class SyncEditData : public sync::Data
{ {
public: public:
SyncEditData() : sync::Data() {} SyncEditData() : sync::Data(), clientPaused(true) {}
void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key) void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key)
{ {
@ -35,6 +35,25 @@ public:
send(clientSocket, (char*)&row, sizeof(int), 0); send(clientSocket, (char*)&row, sizeof(int), 0);
} }
void sendSetRowCommand(int row)
{
if (INVALID_SOCKET == clientSocket) return;
unsigned char cmd = SET_ROW;
send(clientSocket, (char*)&cmd, 1, 0);
send(clientSocket, (char*)&row, sizeof(int), 0);
}
void sendPauseCommand(bool pause)
{
unsigned char cmd = PAUSE;
send(clientSocket, (char*)&cmd, 1, 0);
unsigned char flag = pause;
send(clientSocket, (char*)&flag, 1, 0);
clientPaused = pause;
}
class Command class Command
{ {
public: public:
@ -227,6 +246,7 @@ public:
SOCKET clientSocket; SOCKET clientSocket;
// private: // private:
std::map<size_t, size_t> clientRemap; std::map<size_t, size_t> clientRemap;
bool clientPaused;
std::stack<Command*> undoStack; std::stack<Command*> undoStack;
std::stack<Command*> redoStack; std::stack<Command*> redoStack;

View File

@ -379,6 +379,8 @@ int _tmain(int argc, _TCHAR* argv[])
puts("connected."); puts("connected.");
syncData.clientSocket = clientSocket; syncData.clientSocket = clientSocket;
syncData.clientRemap.clear(); syncData.clientRemap.clear();
syncData.sendPauseCommand(true);
syncData.sendSetRowCommand(trackView->getEditRow());
} }
} }
} }

View File

@ -514,6 +514,7 @@ void TrackView::setEditRow(int newEditRow)
selectStartRow = selectStopRow = editRow; selectStartRow = selectStopRow = editRow;
selectStartTrack = selectStopTrack = editTrack; selectStartTrack = selectStopTrack = editTrack;
} }
getSyncData()->sendSetRowCommand(editRow);
} }
invalidateRow(oldEditRow); invalidateRow(oldEditRow);
@ -734,7 +735,7 @@ void TrackView::editBiasValue(float amount)
LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/) LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
{ {
if (editString.empty()) if (editString.empty() && getSyncData()->clientPaused)
{ {
switch (keyCode) switch (keyCode)
{ {
@ -810,6 +811,9 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/)
MessageBeep(0); MessageBeep(0);
} }
break; break;
case VK_SPACE:
getSyncData()->sendPauseCommand( !getSyncData()->clientPaused );
break;
} }
return FALSE; return FALSE;
} }

View File

@ -26,6 +26,7 @@ public:
void editBiasValue(float amount); void editBiasValue(float amount);
void setEditRow(int newEditRow); void setEditRow(int newEditRow);
int getEditRow() { return editRow; }
private: private:
// some nasty hackery to forward the window messages // some nasty hackery to forward the window messages