Using the NetworkSocket stuff for the server as well. Hopefully doing some better encapsulation of issues in the network protocol.

This commit is contained in:
Erik Faye-Lund 2008-09-26 19:02:32 +00:00
parent 378b78ebc8
commit f405a24e07
3 changed files with 44 additions and 44 deletions

View File

@ -18,52 +18,53 @@ public:
void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key) void sendSetKeyCommand(int track, int row, const sync::Track::KeyFrame &key)
{ {
if (INVALID_SOCKET == clientSocket) return; if (!clientSocket.connected()) return;
if (clientRemap.count(track) == 0) return; if (clientRemap.count(track) == 0) return;
track = int(clientRemap[track]); track = int(clientRemap[track]);
unsigned char cmd = SET_KEY; unsigned char cmd = SET_KEY;
send(clientSocket, (char*)&cmd, 1, 0); clientSocket.send((char*)&cmd, 1, 0);
send(clientSocket, (char*)&track, sizeof(int), 0); clientSocket.send((char*)&track, sizeof(int), 0);
send(clientSocket, (char*)&row, sizeof(int), 0); clientSocket.send((char*)&row, sizeof(int), 0);
send(clientSocket, (char*)&key.value, sizeof(float), 0); clientSocket.send((char*)&key.value, sizeof(float), 0);
send(clientSocket, (char*)&key.interpolationType, 1, 0); clientSocket.send((char*)&key.interpolationType, 1, 0);
} }
void sendDeleteKeyCommand(int track, int row) void sendDeleteKeyCommand(int track, int row)
{ {
if (INVALID_SOCKET == clientSocket) return; if (!clientSocket.connected()) return;
if (clientRemap.count(track) == 0) return; if (clientRemap.count(track) == 0) return;
track = int(clientRemap[track]); track = int(clientRemap[track]);
unsigned char cmd = DELETE_KEY; unsigned char cmd = DELETE_KEY;
send(clientSocket, (char*)&cmd, 1, 0); clientSocket.send((char*)&cmd, 1, 0);
send(clientSocket, (char*)&track, sizeof(int), 0); clientSocket.send((char*)&track, sizeof(int), 0);
send(clientSocket, (char*)&row, sizeof(int), 0); clientSocket.send((char*)&row, sizeof(int), 0);
} }
void sendSetRowCommand(int row) void sendSetRowCommand(int row)
{ {
if (INVALID_SOCKET == clientSocket) return; if (!clientSocket.connected()) return;
unsigned char cmd = SET_ROW; unsigned char cmd = SET_ROW;
send(clientSocket, (char*)&cmd, 1, 0); clientSocket.send((char*)&cmd, 1, 0);
send(clientSocket, (char*)&row, sizeof(int), 0); clientSocket.send((char*)&row, sizeof(int), 0);
} }
void sendPauseCommand(bool pause) void sendPauseCommand(bool pause)
{ {
if (INVALID_SOCKET == clientSocket) return; if (!clientSocket.connected()) return;
unsigned char cmd = PAUSE; unsigned char cmd = PAUSE;
send(clientSocket, (char*)&cmd, 1, 0); clientSocket.send((char*)&cmd, 1, 0);
unsigned char flag = pause; unsigned char flag = pause;
send(clientSocket, (char*)&flag, 1, 0); clientSocket.send((char*)&flag, 1, 0);
clientPaused = pause; clientPaused = pause;
} }
void sendSaveCommand() void sendSaveCommand()
{ {
if (!clientSocket.connected()) return;
unsigned char cmd = SAVE_TRACKS; unsigned char cmd = SAVE_TRACKS;
send(clientSocket, (char*)&cmd, 1, 0); clientSocket.send((char*)&cmd, 1, 0);
} }
class Command class Command
@ -271,7 +272,7 @@ public:
bool load(const std::string &fileName); bool load(const std::string &fileName);
bool save(const std::string &fileName); bool save(const std::string &fileName);
SOCKET clientSocket; NetworkSocket clientSocket;
std::map<size_t, size_t> clientRemap; std::map<size_t, size_t> clientRemap;
bool clientPaused; bool clientPaused;

View File

@ -414,8 +414,6 @@ int _tmain(int argc, _TCHAR* argv[])
} */ } */
#endif #endif
document.clientSocket = INVALID_SOCKET;
ATOM mainClass = registerMainWindowClass(hInstance); ATOM mainClass = registerMainWindowClass(hInstance);
ATOM trackViewClass = registerTrackViewWindowClass(hInstance); ATOM trackViewClass = registerTrackViewWindowClass(hInstance);
if (!mainClass || !trackViewClass) if (!mainClass || !trackViewClass)
@ -452,13 +450,14 @@ int _tmain(int argc, _TCHAR* argv[])
#if 1 #if 1
bool done = false; bool done = false;
SOCKET clientSocket = INVALID_SOCKET;
MSG msg; MSG msg;
bool guiConnected = false;
while (!done) while (!done)
{ {
#if 1 #if 1
if (INVALID_SOCKET == clientSocket) if (!document.clientSocket.connected())
{ {
SOCKET clientSocket = INVALID_SOCKET;
fd_set fds; fd_set fds;
FD_ZERO(&fds); FD_ZERO(&fds);
FD_SET(serverSocket, &fds); FD_SET(serverSocket, &fds);
@ -477,10 +476,11 @@ int _tmain(int argc, _TCHAR* argv[])
TCHAR temp[256]; TCHAR temp[256];
_sntprintf_s(temp, 256, _T("Connected to %s"), inet_ntoa(client.sin_addr)); _sntprintf_s(temp, 256, _T("Connected to %s"), inet_ntoa(client.sin_addr));
SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)temp); SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)temp);
document.clientSocket = clientSocket; document.clientSocket = NetworkSocket(clientSocket);
document.clientRemap.clear(); document.clientRemap.clear();
document.sendPauseCommand(true); document.sendPauseCommand(true);
document.sendSetRowCommand(trackView->getEditRow()); document.sendSetRowCommand(trackView->getEditRow());
guiConnected = true;
#if 0 #if 0
int flag = 1; int flag = 1;
return setsockopt( return setsockopt(
@ -491,46 +491,36 @@ int _tmain(int argc, _TCHAR* argv[])
sizeof(int) /* length of option value */ sizeof(int) /* length of option value */
); );
#endif #endif
} }
else SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)_T("Not Connected.")); else SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)_T("Not Connected."));
} }
} }
if (INVALID_SOCKET != clientSocket) if (document.clientSocket.connected())
{ {
NetworkSocket &clientSocket = document.clientSocket;
// look for new commands // look for new commands
while (pollRead(clientSocket)) while (clientSocket.pollRead())
{ {
unsigned char cmd = 0; unsigned char cmd = 0;
if (0 > recv(clientSocket, (char*)&cmd, 1, 0)) if (clientSocket.recv((char*)&cmd, 1, 0))
{
closesocket(clientSocket);
clientSocket = INVALID_SOCKET;
document.clientSocket = INVALID_SOCKET;
document.clientRemap.clear();
document.clientPaused = true;
InvalidateRect(trackViewWin, NULL, FALSE);
SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)_T("Not Connected."));
break;
}
else
{ {
switch (cmd) switch (cmd)
{ {
case GET_TRACK: case GET_TRACK:
{ {
size_t clientIndex = 0; size_t clientIndex = 0;
recv(clientSocket, (char*)&clientIndex, sizeof(int), 0); clientSocket.recv((char*)&clientIndex, sizeof(int), 0);
// get len // get len
int str_len = 0; int str_len = 0;
recv(clientSocket, (char*)&str_len, sizeof(int), 0); clientSocket.recv((char*)&str_len, sizeof(int), 0);
// get string // get string
std::string trackName; std::string trackName;
trackName.resize(str_len); trackName.resize(str_len);
recv(clientSocket, &trackName[0], str_len, 0); clientSocket.recv(&trackName[0], str_len, 0);
// find track // find track
size_t serverIndex = document.getTrackIndex(trackName.c_str()); size_t serverIndex = document.getTrackIndex(trackName.c_str());
@ -555,7 +545,7 @@ int _tmain(int argc, _TCHAR* argv[])
case SET_ROW: case SET_ROW:
{ {
int newRow = 0; int newRow = 0;
recv(clientSocket, (char*)&newRow, sizeof(int), 0); clientSocket.recv((char*)&newRow, sizeof(int), 0);
trackView->setEditRow(newRow); trackView->setEditRow(newRow);
} }
break; break;
@ -563,6 +553,15 @@ int _tmain(int argc, _TCHAR* argv[])
} }
} }
} }
if (!document.clientSocket.connected() && guiConnected)
{
document.clientPaused = true;
InvalidateRect(trackViewWin, NULL, FALSE);
SendMessage(statusBarWin, SB_SETTEXT, 0, (LPARAM)_T("Not Connected."));
guiConnected = false;
}
#endif #endif
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{ {
@ -576,7 +575,6 @@ int _tmain(int argc, _TCHAR* argv[])
Sleep(1); Sleep(1);
} }
closesocket(clientSocket);
closesocket(serverSocket); closesocket(serverSocket);
closeNetwork(); closeNetwork();

View File

@ -32,7 +32,8 @@ bool pollRead(SOCKET socket);
class NetworkSocket class NetworkSocket
{ {
public: public:
NetworkSocket(SOCKET socket = INVALID_SOCKET) : socket(socket) {} NetworkSocket() : socket(INVALID_SOCKET) {}
explicit NetworkSocket(SOCKET socket) : socket(socket) {}
bool connected() const { return INVALID_SOCKET != socket; }; bool connected() const { return INVALID_SOCKET != socket; };
void disconnect() void disconnect()