Fixed copy/paste (again). Added some ifdef'ed out functions for some wrapped (retrying) recv and send's.

This commit is contained in:
Erik Faye-Lund 2008-02-28 23:39:02 +00:00
parent 06b07193c5
commit 3e6e30cc12
5 changed files with 57 additions and 19 deletions

View File

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

View File

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

View File

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

View File

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

View File

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