From 3e6e30cc1256c6bbb164f65840a022261763afdc Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Thu, 28 Feb 2008 23:39:02 +0000 Subject: [PATCH] Fixed copy/paste (again). Added some ifdef'ed out functions for some wrapped (retrying) recv and send's. --- editor/synctracker2.cpp | 23 +++++++++++++++-------- editor/trackview.cpp | 18 ++++++++++-------- sync/device_client.cpp | 3 +-- sync/network.cpp | 27 ++++++++++++++++++++++++++- sync/network.h | 5 +++++ 5 files changed, 57 insertions(+), 19 deletions(-) diff --git a/editor/synctracker2.cpp b/editor/synctracker2.cpp index 84b9721..2b02a56 100644 --- a/editor/synctracker2.cpp +++ b/editor/synctracker2.cpp @@ -481,6 +481,17 @@ int _tmain(int argc, _TCHAR* argv[]) document.clientRemap.clear(); document.sendPauseCommand(true); document.sendSetRowCommand(trackView->getEditRow()); +#if 0 + int flag = 1; + return setsockopt( + serverSocket, /* socket affected */ + IPPROTO_TCP, /* set option at TCP level */ + TCP_NODELAY, /* name of option */ + (char *) &flag, /* the cast is historical cruft */ + sizeof(int) /* length of option value */ + ); +#endif + } else SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)_T("Not Connected.")); } @@ -492,8 +503,7 @@ int _tmain(int argc, _TCHAR* argv[]) while (pollRead(clientSocket)) { unsigned char cmd = 0; - int ret = recv(clientSocket, (char*)&cmd, 1, 0); - if (1 > ret) + if (0 > recv(clientSocket, (char*)&cmd, 1, 0)) { closesocket(clientSocket); clientSocket = INVALID_SOCKET; @@ -511,14 +521,11 @@ int _tmain(int argc, _TCHAR* argv[]) case GET_TRACK: { size_t clientIndex = 0; - int ret = recv(clientSocket, (char*)&clientIndex, sizeof(int), 0); + recv(clientSocket, (char*)&clientIndex, sizeof(int), 0); // get len int str_len = 0; - ret = recv(clientSocket, (char*)&str_len, sizeof(int), 0); - - // int clientAddr = 0; - // int ret = recv(clientSocket, (char*)&clientAddr, sizeof(int), 0); + recv(clientSocket, (char*)&str_len, sizeof(int), 0); // get string std::string trackName; @@ -548,7 +555,7 @@ int _tmain(int argc, _TCHAR* argv[]) case SET_ROW: { int newRow = 0; - int ret = recv(clientSocket, (char*)&newRow, sizeof(int), 0); + recv(clientSocket, (char*)&newRow, sizeof(int), 0); trackView->setEditRow(newRow); } break; diff --git a/editor/trackview.cpp b/editor/trackview.cpp index b2a79b8..f583578 100644 --- a/editor/trackview.cpp +++ b/editor/trackview.cpp @@ -361,7 +361,6 @@ struct CopyEntry sync::Track::KeyFrame keyFrame; }; - void TrackView::editCopy() { int selectLeft = min(selectStartTrack, selectStopTrack); @@ -395,7 +394,7 @@ void TrackView::editCopy() assert(NULL != keyFrame); CopyEntry ce; - ce.track = int(trackIndex); + ce.track = track - selectLeft; ce.row = localRow; ce.keyFrame = *keyFrame; @@ -451,7 +450,7 @@ void TrackView::editPaste() memcpy(&buffer_width, clipbuf + 0, sizeof(int)); memcpy(&buffer_height, clipbuf + sizeof(int), sizeof(int)); memcpy(&buffer_size, clipbuf + 2 * sizeof(int), sizeof(size_t)); - + if (buffer_size > 0) { char *src = clipbuf + 2 * sizeof(int) + sizeof(size_t); @@ -461,12 +460,15 @@ void TrackView::editPaste() { struct CopyEntry ce; memcpy(&ce, src, sizeof(CopyEntry)); - - size_t trackIndex = document->getTrackIndexFromPos(editTrack + ce.track); - - SyncDocument::Command *cmd = document->getSetKeyFrameCommand(int(trackIndex), editRow + ce.row, ce.keyFrame); - multiCmd->addCommand(cmd); src += sizeof(CopyEntry); + + size_t trackPos = editTrack + ce.track; + if (trackPos < document->getTrackCount()) + { + size_t trackIndex = document->getTrackIndexFromPos(trackPos); + SyncDocument::Command *cmd = document->getSetKeyFrameCommand(int(trackIndex), editRow + ce.row, ce.keyFrame); + multiCmd->addCommand(cmd); + } } document->exec(multiCmd); } diff --git a/sync/device_client.cpp b/sync/device_client.cpp index 0d00183..6e1c8eb 100644 --- a/sync/device_client.cpp +++ b/sync/device_client.cpp @@ -69,8 +69,7 @@ bool ClientDevice::update(float row) while (pollRead(serverSocket)) { unsigned char cmd = 0; - int ret = recv(serverSocket, (char*)&cmd, 1, 0); - if (0 >= ret) + if (0 > recv(serverSocket, (char*)&cmd, 1, 0)) { done = true; break; diff --git a/sync/network.cpp b/sync/network.cpp index b580c00..961fafc 100644 --- a/sync/network.cpp +++ b/sync/network.cpp @@ -74,7 +74,8 @@ SOCKET serverConnect(struct sockaddr_in *addr) const char *expectedGreeting = serverGreeting; char recievedGreeting[128]; - recv(serverSocket, recievedGreeting, int(sizeof(recievedGreeting)), 0); + + recv(serverSocket, recievedGreeting, int(strlen(expectedGreeting)), 0); if (strncmp(expectedGreeting, recievedGreeting, strlen(expectedGreeting)) != 0) { closesocket(serverSocket); @@ -95,4 +96,28 @@ bool pollRead(SOCKET socket) // look for new commands return select(0, &fds, NULL, NULL, &timeout) > 0; } +#if 0 +bool recvBlock(SOCKET socket, char *buffer, size_t length, int flags) +{ + size_t pos = 0; + while (pos < length) + { + int ret = recv(socket, &buffer[pos], int(length - pos), flags); + if (0 > ret) return false; // error + pos += ret; + } + return true; +} +bool sendBlock(SOCKET socket, const char *buffer, size_t length, int flags) +{ + size_t pos = 0; + while (pos < length) + { + int ret = send(socket, &buffer[pos], int(length - pos), flags); + if (0 > ret) return false; // error + pos += ret; + } + return true; +} +#endif diff --git a/sync/network.h b/sync/network.h index 36e0173..8cca5c9 100644 --- a/sync/network.h +++ b/sync/network.h @@ -30,6 +30,11 @@ SOCKET serverConnect(struct sockaddr_in *addr); bool pollRead(SOCKET socket); +#if 0 +bool recvBlock(SOCKET socket, char *buffer, size_t length, int flags); +bool sendBlock(SOCKET socket, const char *buffer, size_t length, int flags); +#endif + enum RemoteCommand { // server -> client SET_KEY = 0,