summaryrefslogtreecommitdiff
path: root/maximus/sci/src/SciServer.cpp
diff options
context:
space:
mode:
authorburet2007-05-21 12:19:37 +0000
committerburet2007-05-21 12:19:37 +0000
commit73c2d4cb58e545d89881a8289bf07635a579c8c4 (patch)
treee91cca08252d9b4227a527f36e96afbd9d6535ca /maximus/sci/src/SciServer.cpp
parent8c174bd6d40278a3964611736cd2d06864b097d6 (diff)
Specialized SciMsg
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@141 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'maximus/sci/src/SciServer.cpp')
-rw-r--r--maximus/sci/src/SciServer.cpp97
1 files changed, 64 insertions, 33 deletions
diff --git a/maximus/sci/src/SciServer.cpp b/maximus/sci/src/SciServer.cpp
index 5f3f258661..d474baf36c 100644
--- a/maximus/sci/src/SciServer.cpp
+++ b/maximus/sci/src/SciServer.cpp
@@ -47,9 +47,15 @@ using namespace std;
// Constructors/Destructors
//
+
-
-SciServer::SciServer ( ) throw (Error_Id)
+SciServer::SciServer ( ) throw (Error_Id):
+server_thread(0),
+status(MAXIMUS_SCI_SERVER_STATUS_NONE),
+//server_mutex(),
+mpSpecializedSciMsgArray(NULL),
+mArraySize(0),
+mListOfStations(0)
{
initAttributes();
@@ -65,7 +71,6 @@ void SciServer::initAttributes ( )
{
// Init array
//
- mpSpecializedSciMsgArray = NULL;
mArraySize = 10;
mpSpecializedSciMsgArray = new SciMsg * [mArraySize];
for (unsigned int i=0; i<mArraySize; i++)
@@ -73,11 +78,15 @@ void SciServer::initAttributes ( )
*(mpSpecializedSciMsgArray+i) = NULL;
}
- server_thread = 0;
- status = MAXIMUS_SCI_SERVER_STATUS_NONE;
pthread_mutex_init(&server_mutex, NULL);
}
+/*
+SciServer ( const SciServer & ) throw (Error_Id)
+{
+
+}
+*/
SciServer::~SciServer ( )
{
@@ -122,26 +131,17 @@ void SciServer::registerSpecializedSciMsg ( Sci_Msg_Type sci_msg_type, SciMsg *
}
-bool SciServer::receiveMsg ( Sci_Msg_Header * header, unsigned char * received_data, unsigned long data_length )
+bool SciServer::receiveMsg ( Sci_Msg_Header * header, unsigned long data_length, unsigned char * received_data )
{
cout << "SciServer::receiveMsg" << endl;
+ bool bReceiveMsg = false;
// Log the SCI message header
//
displayMsgHeader (header);
-
- // Keep data without header
- //
- unsigned long headerSize = (unsigned long) sizeof(header);
- unsigned char * remainingData = new unsigned char [data_length-headerSize];
- for (unsigned long i=headerSize; i<data_length; i++)
- {
- *(remainingData+i-headerSize) = *(received_data+i);
- }
// Create a specialized SCI message according to the message header type
//
- header->type = MAXIMUS_SCI_MSG_TYPE_NETCLOCK; // TO BE REMOVED
SciMsg * sciMsg = NULL;
createSciMsg (header->type, &sciMsg);
@@ -149,16 +149,23 @@ bool SciServer::receiveMsg ( Sci_Msg_Header * header, unsigned char * received_d
//
if (NULL != sciMsg)
{
- fillSciMsg (header, data_length, remainingData, sciMsg);
+ fillSciMsg (header, data_length, received_data, &sciMsg);
+ cout << "data_length = " << data_length << endl;
+ cout << "received_data = ";
+ for (unsigned long i=0; i<data_length; i++)
+ {
+ cout << *(received_data+i);
+ }
+ cout << endl;
processSciMsg (sciMsg);
+ bReceiveMsg = true;
}
-
+
// Free allocated memory
//
- delete [] remainingData;
delete sciMsg;
- return true;
+ return bReceiveMsg;
}
@@ -178,7 +185,7 @@ void *SciServer::serverThread(void *arg)
struct timeval timeout;
int result;
Station *station;
- List::iterator it;
+ StationsList::iterator it;
while(sci_server->getStatus() == MAXIMUS_SCI_SERVER_STATUS_RUNNING)
{
@@ -247,7 +254,7 @@ void *SciServer::serverThread(void *arg)
free(buffer);
continue;
}
- sci_server->receiveMsg(&header, buffer, header.length);
+ sci_server->receiveMsg(&header, header.length, buffer);
free(buffer);
}
}
@@ -282,38 +289,61 @@ void SciServer::displayMsgHeader ( Sci_Msg_Header * msg_header )
bool SciServer::createSciMsg ( uint8_t type, SciMsg ** received_sci_msg )
{
cout << "SciServer::createSpecializedSciMsg" << endl;
+ bool bCreateMsg = false;
// Create a specialized SCI message according to the header type
//
* received_sci_msg = (*(mpSpecializedSciMsgArray + type))->create();
+
+ if (NULL != * received_sci_msg)
+ {
+ bCreateMsg = true;
+ }
- return true;
+ return bCreateMsg;
}
-bool SciServer::fillSciMsg ( Sci_Msg_Header * msg_header, unsigned long data_length, unsigned char * remaining_data, SciMsg * received_sci_msg )
+bool SciServer::fillSciMsg ( Sci_Msg_Header * msg_header, unsigned long data_length, unsigned char * p_received_data, SciMsg ** created_sci_msg )
{
cout << "SciServer::fillSciMsg" << endl;
+ bool bFillMsg = false;
// Fill SCI message contents
//
- if (NULL != received_sci_msg)
+ if (NULL != created_sci_msg)
{
- received_sci_msg->setSciMsgHeader(msg_header);
- received_sci_msg->setSpecializedSciMsgHeader(data_length, remaining_data);
- received_sci_msg->setSciMsgBody(data_length, remaining_data);
+ (*created_sci_msg)->setSciMsgHeader(msg_header);
+ (*created_sci_msg)->setSciMsgDataLength(data_length);
+ (*created_sci_msg)->setSciMsgData(p_received_data);
+ (*created_sci_msg)->extractSpecializedSciMsgHeader(data_length, p_received_data);
+ (*created_sci_msg)->extractSpecializedSciMsgData(data_length, p_received_data);
+ cout << "data_length = " << data_length << endl;
+ cout << "p_received_data = ";
+ for (unsigned long i=0; i<data_length; i++)
+ {
+ cout << *(p_received_data+i);
+ }
+ cout << endl;
+ bFillMsg = true;
}
- return true;
+ return bFillMsg;
}
bool SciServer::processSciMsg ( SciMsg * received_sci_msg )
{
cout << "SciServer::processSciMsg" << endl;
+ bool bProcessMsg = false;
- received_sci_msg->dispatchMsg();
- return true;
+ if (NULL != received_sci_msg)
+ {
+ received_sci_msg->dispatchMsg();
+ bProcessMsg = true;
+ }
+
+ return bProcessMsg;
}
@@ -363,13 +393,14 @@ SciMsg ** SciServer::getSpecializedSciMsgArray ( )
}
-void SciServer::setListOfStations ( List list_of_stations )
+bool SciServer::setListOfStations ( StationsList list_of_stations )
{
mListOfStations = list_of_stations;
+ return true;
}
-List SciServer::getListOfStations ( )
+StationsList SciServer::getListOfStations ( )
{
return mListOfStations;
}