00001 #include "stdafx.h"
00002
00003 #include "ippdme/Spy/ippClientServerSpy.h"
00004 #include "ippdme/assert.h"
00005 #include "ippdme/Server/ippLogger.h"
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 ippClientServerSpy::ippClientServerSpy()
00018 : _logger(0)
00019 , _oldClientState(ippSpyClient::trying_to_connect)
00020 , _oldServerState(ippSpyServer::connected)
00021 , _listening_port(1294)
00022 , _state(disconnected)
00023 {
00024 _client.setParent(this);
00025 _server.setParent(this);
00026
00027 }
00028
00029 ippClientServerSpy::~ippClientServerSpy()
00030 {
00031 Stop();
00032 }
00033
00034
00035 bool ippClientServerSpy::Start(
00036 int listening_port,
00037 const char* server_ip,
00038 int server_port
00039 )
00040 {
00041 _listening_port = listening_port;
00042 if (getStatus() != disconnected) {
00043 Stop();
00044 }
00045 IPP_ASSERT(getStatus() == disconnected);
00046 HeartBeat();
00047
00048 _client.Connect(server_ip,server_port);
00049 _state = trying_to_connect_to_remote_server;
00050
00051 HeartBeat();
00052 return true;
00053 }
00054
00055
00056
00057 void ippClientServerSpy::HeartBeat()
00058 {
00059 _server.HeartBeat();
00060 _client.HeartBeat();
00061
00062 STATE oldState = _state;
00063
00064 ippSpyClient::STATE newClientState = getClientStatus();
00065 if (_oldClientState == ippSpyClient::trying_to_connect && newClientState == ippSpyClient::connected )
00066 {
00067 _server.PowerOn(_listening_port);
00068 if (_server.getStatus() == ippSpyServer::listening) {
00069 _state = listening;
00070 }
00071 }
00072 ippSpyServer::STATE _newServerState = getServerStatus();
00073
00074 if (_newServerState == ippSpyServer::connected) {
00075 _state = connected;
00076 }
00077
00078 if (_oldServerState != _newServerState ) {
00079 _oldServerState = _newServerState;
00080
00081 }
00082
00083 if (oldState != _state) {
00084 OnStatusChanged(_state);
00085 }
00086
00087 }
00088
00089 void ippClientServerSpy::Stop()
00090 {
00091 _server.PowerOff();
00092 _client.Disconnect();
00093 HeartBeat();
00094 IPP_ASSERT(getServerStatus() == ippSpyServer::uninitialized);
00095 IPP_ASSERT(getClientStatus() == ippSpyClient::disconnected);
00096 _state = disconnected;
00097 }
00098
00099 ippClientServerSpy::STATE ippClientServerSpy::getStatus() const {
00100 return _state;
00101 }
00102 void ippClientServerSpy::SendCommandLine(const char* inputline,bool bwellFormed)
00103 {
00104 _client.SendCommand(inputline);
00105 if(_logger) {
00106 _logger->WriteLineFormat("<<< %s",inputline);
00107 }
00108 }
00109
00110 void ippClientServerSpy::SendResponseLine(const char* inputline,bool bwellFormed)
00111 {
00112 _server.WriteToSocket(inputline);
00113 if(_logger) {
00114 _logger->WriteLineFormat(">>> %s",inputline);
00115 }
00116 }
00117
00118 void ippClientServerSpy::setLogger(ippLogger* logger)
00119 {
00120 _logger = logger;
00121 }
00122
00123 ippLogger* ippClientServerSpy::GetLogger() const
00124 {
00125 return _logger;
00126 }
00127
00128 ippSpyClient::STATE ippClientServerSpy::getClientStatus() const
00129 {
00130 return _client.getStatus();
00131 }
00132 ippSpyServer::STATE ippClientServerSpy::getServerStatus() const
00133 {
00134 return _server.getStatus();
00135 }
00136
00137