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

@ -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));

View File

@ -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 */

View File

@ -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);
}

View File

@ -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<size_t, size_t> clientRemap;
bool clientPaused;
std::stack<Command*> undoStack;
std::stack<Command*> redoStack;

View File

@ -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());
}
}
}

View File

@ -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;
}

View File

@ -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