Initial
This commit is contained in:
160
proto/source/gensrv.cpp
Normal file
160
proto/source/gensrv.cpp
Normal file
@@ -0,0 +1,160 @@
|
||||
#include <proto/gensrv.hpp>
|
||||
#include <common/string.hpp>
|
||||
|
||||
GenericServer::GenericServer(void)
|
||||
: mIsRunning(TRUE)
|
||||
{
|
||||
}
|
||||
|
||||
GenericServer::~GenericServer()
|
||||
{
|
||||
message("Server is destructing...");
|
||||
}
|
||||
|
||||
void GenericServer::close(void)
|
||||
{
|
||||
mIsRunning=FALSE;
|
||||
}
|
||||
|
||||
WORD GenericServer::send(const char &charData)
|
||||
{
|
||||
return mPortControl.send(charData);
|
||||
}
|
||||
|
||||
WORD GenericServer::send(const String &sendString)
|
||||
{
|
||||
return mPortControl.send(sendString);
|
||||
}
|
||||
|
||||
WORD GenericServer::receive(String &receiveString,BOOL waitForData)
|
||||
{
|
||||
return mPortControl.receive(receiveString,waitForData);
|
||||
}
|
||||
|
||||
WORD GenericServer::receive(char &charData,BOOL waitForData)
|
||||
{
|
||||
return mPortControl.receive(charData,waitForData);
|
||||
}
|
||||
|
||||
WORD GenericServer::receive(Block<String> &receiveStrings)
|
||||
{
|
||||
return mPortControl.receive(receiveStrings);
|
||||
}
|
||||
|
||||
/*
|
||||
WORD GenericServer::listen(const String &hostName,short portNum)
|
||||
{
|
||||
HostEnt hostEntry;
|
||||
ServEnt serverEntry;
|
||||
String stringData;
|
||||
|
||||
message(String("trying host'")+hostName+String("'..."));
|
||||
if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;}
|
||||
InternetAddress internetAddress(hostName);
|
||||
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}}
|
||||
else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;}
|
||||
message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")"));
|
||||
mInternetSocketAddress.internetAddress((hostEntry.addresses())[0]);
|
||||
mInternetSocketAddress.family(PF_INET);
|
||||
mInternetSocketAddress.port(portNum);
|
||||
while(TRUE)
|
||||
{
|
||||
INETSocketAddress internetSocketAddress;
|
||||
message(String("[GenericServer::listen] host='")+(hostEntry.addresses())[0]+String("' port=")+String().fromInt(portNum));
|
||||
if(!mGenericControl.create()){message("socket initialization failure.");return FALSE;}
|
||||
if(!mGenericControl.bind(mInternetSocketAddress)){message("bind failed");return FALSE;}
|
||||
String strLocalHost((String)mInternetSocketAddress.internetAddress());
|
||||
message(String("local address is ")+strLocalHost);
|
||||
if(!mGenericControl.listen()){message("listen failed");return FALSE;}
|
||||
message("waiting for connection...");
|
||||
if(!mGenericControl.accept(mPortControl,internetSocketAddress)){message("accept returned FALSE;");return FALSE;}
|
||||
message(String("service started from ")+(String)internetSocketAddress.internetAddress());
|
||||
mPortControl.bind(internetSocketAddress);
|
||||
acceptHandler();
|
||||
if(mPortControl.receive(stringData))stringHandler(stringData);
|
||||
mPortControl.destroy();
|
||||
mGenericControl.destroy();
|
||||
::Sleep(TimeOut);
|
||||
}
|
||||
message("terminating connection");
|
||||
return TRUE;
|
||||
}
|
||||
*/
|
||||
|
||||
WORD GenericServer::listen(const String &hostName,short portNum)
|
||||
{
|
||||
HostEnt hostEntry;
|
||||
ServEnt serverEntry;
|
||||
String stringData;
|
||||
|
||||
message(String("trying host'")+hostName+String("'..."));
|
||||
if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;}
|
||||
InternetAddress internetAddress(hostName);
|
||||
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}}
|
||||
else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;}
|
||||
message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")"));
|
||||
mInternetSocketAddress.internetAddress((hostEntry.addresses())[0]);
|
||||
mInternetSocketAddress.family(PF_INET);
|
||||
mInternetSocketAddress.port(portNum);
|
||||
while(TRUE)
|
||||
{
|
||||
INETSocketAddress internetSocketAddress;
|
||||
message(String("[GenericServer::listen] host='")+(hostEntry.addresses())[0]+String("' port=")+String().fromInt(portNum));
|
||||
if(!mGenericControl.create()){message("socket initialization failure.");return FALSE;}
|
||||
mGenericControl.reuseAddress();
|
||||
if(!mGenericControl.bind(mInternetSocketAddress)){message("bind failed");return FALSE;}
|
||||
String strLocalHost((String)mInternetSocketAddress.internetAddress());
|
||||
message(String("local address is ")+strLocalHost);
|
||||
if(!mGenericControl.listen()){message("listen failed");return FALSE;}
|
||||
message("waiting for connection...");
|
||||
if(!mGenericControl.accept(mPortControl,internetSocketAddress)){message("accept returned FALSE;");return FALSE;}
|
||||
message(String("service started from ")+internetSocketAddress.internetAddress().toString());
|
||||
mPortControl.bind(internetSocketAddress);
|
||||
acceptHandler();
|
||||
// if(mPortControl.receive(stringData))stringHandler(stringData);
|
||||
Block<String> receiveStrings;
|
||||
printf("Received data...");
|
||||
if(mPortControl.receive(receiveStrings))
|
||||
{
|
||||
for(int index=0;index<receiveStrings.size();index++)
|
||||
{
|
||||
printf("%s\n",receiveStrings[index].str());
|
||||
}
|
||||
}
|
||||
mPortControl.destroy();
|
||||
mGenericControl.destroy();
|
||||
::Sleep(TimeOut);
|
||||
}
|
||||
message("terminating connection");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// virtuals
|
||||
|
||||
void GenericServer::message(const String &message)
|
||||
{
|
||||
::OutputDebugString(message+String("\n"));
|
||||
}
|
||||
|
||||
void GenericServer::message(Block<String> &msgData)
|
||||
{
|
||||
for(int msgIndex=0;msgIndex<msgData.size();msgIndex++)message(msgData[msgIndex]);
|
||||
}
|
||||
|
||||
void GenericServer::acceptHandler(void)
|
||||
{
|
||||
String acceptString("200 GenericServer::acceptHandler accepting connection.");
|
||||
mPortControl.send(acceptString);
|
||||
message(acceptString);
|
||||
return;
|
||||
}
|
||||
|
||||
BOOL GenericServer::stringHandler(const String &stringData)
|
||||
{
|
||||
String stringString("200 GenericServer::stringHandler received your data.");
|
||||
mPortControl.send(stringString);
|
||||
message(stringString);
|
||||
message(stringData);
|
||||
if(stringData==String("QUIT"))return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
Reference in New Issue
Block a user