From 59d30073f9657306be5d141193f12a590e275c12 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Fri, 15 Feb 2008 02:00:28 +0000 Subject: [PATCH] yes, remote-stuff works! \o/ --- example.cpp | 13 +++++++------ network.h | 8 ++++++++ sync/device_client.cpp | 19 +++++++++++++++++++ synceditdata.h | 22 +++++++++++++++++++++- synctracker2.cpp | 2 ++ trackview.cpp | 6 +++++- trackview.h | 1 + 7 files changed, 63 insertions(+), 8 deletions(-) diff --git a/example.cpp b/example.cpp index f833240..4cb2a66 100644 --- a/example.cpp +++ b/example.cpp @@ -35,17 +35,18 @@ public: void play() { paused = false; } float getRow() - { - if (!paused) return row++; - else return row; + { + float ret = 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; } private: bool paused; - int row; + float row; }; #endif @@ -68,7 +69,7 @@ int main(int argc, char *argv[]) timer.play(); while (1) { - float row = float(timer.getRow()) / 10; + float row = float(timer.getRow()); if (!syncDevice->update(row)) break; printf("%2.2f: %2.2f \n", row, track.getValue(row)); diff --git a/network.h b/network.h index 86d751a..99dd3da 100644 --- a/network.h +++ b/network.h @@ -12,10 +12,18 @@ SOCKET serverConnect(struct sockaddr_in *addr); bool pollRead(SOCKET socket); enum RemoteCommand { + // server -> client SET_KEY = 0, DELETE_KEY = 1, + + // client -> server GET_TRACK = 2, + + // client -> server, server -> client SET_ROW = 3, + + // server -> client + PAUSE = 4, }; #endif /* NETWORK_H */ diff --git a/sync/device_client.cpp b/sync/device_client.cpp index bdd746d..561dcb4 100644 --- a/sync/device_client.cpp +++ b/sync/device_client.cpp @@ -102,6 +102,25 @@ bool ClientDevice::update(float row) } 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: printf("unknown cmd: %02x\n", cmd); } diff --git a/synceditdata.h b/synceditdata.h index 062b560..d87774f 100644 --- a/synceditdata.h +++ b/synceditdata.h @@ -9,7 +9,7 @@ class SyncEditData : public sync::Data { public: - SyncEditData() : sync::Data() {} + SyncEditData() : sync::Data(), clientPaused(true) {} void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key) { @@ -34,7 +34,26 @@ public: send(clientSocket, (char*)&track, 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 { public: @@ -227,6 +246,7 @@ public: SOCKET clientSocket; // private: std::map clientRemap; + bool clientPaused; std::stack undoStack; std::stack redoStack; diff --git a/synctracker2.cpp b/synctracker2.cpp index 15c8fd5..f468dff 100644 --- a/synctracker2.cpp +++ b/synctracker2.cpp @@ -379,6 +379,8 @@ int _tmain(int argc, _TCHAR* argv[]) puts("connected."); syncData.clientSocket = clientSocket; syncData.clientRemap.clear(); + syncData.sendPauseCommand(true); + syncData.sendSetRowCommand(trackView->getEditRow()); } } } diff --git a/trackview.cpp b/trackview.cpp index 9d5c763..393fc77 100644 --- a/trackview.cpp +++ b/trackview.cpp @@ -514,6 +514,7 @@ void TrackView::setEditRow(int newEditRow) selectStartRow = selectStopRow = editRow; selectStartTrack = selectStopTrack = editTrack; } + getSyncData()->sendSetRowCommand(editRow); } invalidateRow(oldEditRow); @@ -734,7 +735,7 @@ void TrackView::editBiasValue(float amount) LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/) { - if (editString.empty()) + if (editString.empty() && getSyncData()->clientPaused) { switch (keyCode) { @@ -810,6 +811,9 @@ LRESULT TrackView::onKeyDown(UINT keyCode, UINT /*flags*/) MessageBeep(0); } break; + case VK_SPACE: + getSyncData()->sendPauseCommand( !getSyncData()->clientPaused ); + break; } return FALSE; } diff --git a/trackview.h b/trackview.h index a899a6e..e43fbaf 100644 --- a/trackview.h +++ b/trackview.h @@ -26,6 +26,7 @@ public: void editBiasValue(float amount); void setEditRow(int newEditRow); + int getEditRow() { return editRow; } private: // some nasty hackery to forward the window messages