[brlcad-commits] SF.net SVN: brlcad:[33678]
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <dav...@us...> - 2009-02-05 20:20:27
|
Revision: 33678 http://brlcad.svn.sourceforge.net/brlcad/?rev=33678&view=rev Author: davidloman Date: 2009-02-05 20:20:20 +0000 (Thu, 05 Feb 2009) Log Message: ----------- Continuing work for gsph0. gsph0 now communicating with gsph0_test during Hostname exchange and new session request. Modified Paths: -------------- rt^3/trunk/src/GeometryService/Session.cxx rt^3/trunk/src/GeometryService/netMsg/GeometryReqMsg.cxx rt^3/trunk/src/GeometryService/netMsg/NetMsg.cxx rt^3/trunk/src/io/DataStream.cxx Modified: rt^3/trunk/src/GeometryService/Session.cxx =================================================================== --- rt^3/trunk/src/GeometryService/Session.cxx 2009-02-05 19:38:37 UTC (rev 33677) +++ rt^3/trunk/src/GeometryService/Session.cxx 2009-02-05 20:20:20 UTC (rev 33678) @@ -70,8 +70,6 @@ //Read in New Data: this->sessionBuffer->writeUByteArray(data_, bytesXferred); std::cout << "\tNew data(" << bytesXferred << "): " << data_ << "\n"; - std::cout << "\tNewMsgFlag=" << this->newMsgFlag << "\n"; - //Do we have more than 4 bytes of data yet? if (this->sessionBuffer->getBytesAvailToRead() < 4) @@ -80,22 +78,23 @@ boost::bind(&Session::HandleRead, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); - std::cout << "\tReading More...\n\n"; + std::cout << "\tReading More...\n"; return; } + std::cout << "\tNewMsgFlag: " << this->newMsgFlag << "\n"; + //Check to see if we are processing a new msg if (this->newMsgFlag) { - //pull the 'msgLEN' out of the buffer this->targetLen = this->sessionBuffer->readUInt(); - std::cout << "\tNew TargetLen\n"; } - std::cout << "\tTargetLen=" << this->targetLen << "\n"; + std::cout << "\tExpected MsgLen: " << this->targetLen << "\n"; std::cout << "\tsessionBuffer Data: " << this->sessionBuffer->getBytesFilled() << " bytes filled, "; - std::cout << this->sessionBuffer->getBytesRead() << " bytes read. \n"; + std::cout << this->sessionBuffer->getBytesRead() << " bytes read. "; + std::cout << this->sessionBuffer->getBytesAvailToRead() << " bytes available.\n"; //check to see if the full message has been recieved yet if (this->sessionBuffer->getBytesAvailToRead() < this->targetLen) @@ -106,85 +105,192 @@ boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); this->newMsgFlag = false; - std::cout << "\tReading More...\n\n"; + std::cout << "\tReading More...\n"; return; } else { - this->newMsgFlag = true; - } + this->newMsgFlag = true; + } std::cout << "\n\tDone Reading, making Msg.\n"; - //Now that we ace >= targetLen, lets build a netMsg + //Now that we are >= targetLen, lets build a netMsg + uInt msgType = this->sessionBuffer->peakUInt(); NetMsg* msg; NetMsg* retMsg; + std::cout << "\tDiscovered Msg is of type: " << msgType << "\n"; - std::cout << "\tMsgType=" << msgType << "\n"; //TODO: move these msgTypes over to a DEFINES switch (msgType) { case 0: //RemHostNameSET - msg = new RemHostNameSetMsg(this->sessionBuffer); + try { - msg->printMe(); + //Recieved a RemHostNameSetMsg + msg = new RemHostNameSetMsg(this->sessionBuffer); - retMsg = new RemHostNameSetFailMsg(5, msg->getReUUID(), msg->getMsgUUID(), 42 ); - this->SendMsg(retMsg); + std::cout << "\tRecieved: "; + msg->printMe(); - delete retMsg; - delete msg; + //Respond with a RemHostNameSetOKMsg + retMsg = new NetMsg(10, msg->getReUUID(), msg->getMsgUUID() ); + this->SendMsg(retMsg); + delete retMsg; + + //Then send a RemHostNameSetMsg + retMsg = new RemHostNameSetMsg(0,"7e213dfe-71cf-4233-8d03-c147685c4bb7",msg->getMsgUUID(),"Klaatu"); + this->SendMsg(retMsg); + + delete retMsg; + delete msg; + } catch (IOException ioe){ + std::cerr << ioe.getMessage() << "\n"; + std::cerr << "There are " <<this->sessionBuffer->getBytesAvailToRead() << " bytes remaining that need to be flushed."; + } break; + case 5: //RemHostNameSETFAIL msg = new RemHostNameSetFailMsg(this->sessionBuffer); + + //yikes!!!!! + delete this; + delete msg; break; + case 10: //RemHostNameSETOK msg = new NetMsg(this->sessionBuffer); + + std::cout << "\tRecieved: "; + msg->printMe(); + std::cout << "\tNo Reply to this msgType.\n"; + delete msg; break; + case 15: //DisconnectREQ msg = new NetMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + delete msg; break; + case 20: //NewHostOneNetINFO msg = new RemHostNameSetMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + delete msg; break; case 40: //NewSessionREQ + //Received a request for a new session: msg = new NetMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + + //reply with the Session UUID + retMsg = new RemHostNameSetMsg(50,"5e9d8909-b1e1-4af8-adff-7df78425d498", msg->getMsgUUID() ,"e277f49c-f599-4982-8284-3aNewSession"); + this->SendMsg(retMsg); + + delete retMsg; + delete msg; + break; + case 45: //NewSessionREQFAIL msg = new RemHostNameSetFailMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + delete msg; break; + case 50: //NewSessionREQOK msg = new RemHostNameSetMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + delete msg; break; case 100: //GeometryREQ msg = new GeometryReqMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + + //Open file + + + //Build & send manifest + + + //Send CHUNK + + + //Send null CHUNK + + + delete msg; break; + case 105: //GeometryREQFAIL msg = new RemHostNameSetFailMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + delete msg; break; + case 110: //GeometryMANIFEST msg = new GeometryManifestMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + delete msg; break; + case 115: //GeometryCHUNK msg = new RemHostNameSetMsg(this->sessionBuffer); + std::cout << "\tRecieved: "; + msg->printMe(); + delete msg; break; default: //We have got a bad MsgType... or corrupt data! + std::cerr << "\nUnknown MsgType: " << msgType << "\nFlushing Buffer:\n"; + + std::cerr << this->sessionBuffer->getBytesAvailToRead() << " bytes remaining in Buffer.\n"; + for (uInt flusher = 0 ; flusher < targetLen; ++flusher) + { + this->sessionBuffer->readUChar(); + } + std::cerr << this->sessionBuffer->getBytesAvailToRead() << " bytes remaining in Buffer.\n"; + + break; } + std::cout << "\n\n\t"; + std::cout << this->sessionBuffer->getBytesAvailToRead() << " bytes remaining in Buffer.\n"; + std::cout << "Done with Read & Send, Listening for next read...\n\n"; + //do we need to flush the buffer? + for (uInt cnt = 0; cnt < max_length; ++cnt) + { + this->data_[cnt] = '\0'; + } + + + socket_.async_read_some(boost::asio::buffer(data_, max_length), + boost::bind(&Session::HandleRead, this, + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred)); + + } else - { + { std::cerr << "Exception " << error << " in HandleRead() \n"; delete this; } @@ -196,16 +302,22 @@ msg->serialize(ds); uInt msgLen = ds->peakUInt(); + uInt dsLen = ds->getBytesAvailToRead(); + + //std::cout << "According to the peakInt(), len=" << msgLen << "\n"; + //std::cout << "According to the ds.getBytesAvailToRead(), len=" << dsLen << "\n"; + uByte* dataToSend; - dataToSend = new uByte[msgLen]; + dataToSend = new uByte[dsLen]; - msgLen = ds->readUByteArray(dataToSend, msgLen); + msgLen = ds->readUByteArray(dataToSend, dsLen); + //std::cout << "According to the ds->readUByteArray, len=" << msgLen << "\n"; - std::cout << "\nSending Msg: msgLen: " << msgLen << "\t "; + std::cout << "\n\tSending Msg: msgLen:\t " << msgLen << "\t "; msg->printMe(); boost::asio::async_write(socket_, - boost::asio::buffer(dataToSend, msgLen + 4), + boost::asio::buffer(dataToSend, dsLen), boost::bind(&Session::HandleWrite, this, boost::asio::placeholders::error)); delete ds; Modified: rt^3/trunk/src/GeometryService/netMsg/GeometryReqMsg.cxx =================================================================== --- rt^3/trunk/src/GeometryService/netMsg/GeometryReqMsg.cxx 2009-02-05 19:38:37 UTC (rev 33677) +++ rt^3/trunk/src/GeometryService/netMsg/GeometryReqMsg.cxx 2009-02-05 20:20:20 UTC (rev 33678) @@ -79,7 +79,8 @@ Num << "msgUUID: " << this->msgUUID << " \t"; Num << "reUUID: " << this->reUUID << " \t"; Num << "ReqType: " << (uInt)this->reqType << " \t"; - Num << "LenOfData: " << this->data.size(); + Num << "LenOfData: " << this->data.size() << " \t"; + Num << "Data: " << this->data; Num << "\n"; return Num.str(); } Modified: rt^3/trunk/src/GeometryService/netMsg/NetMsg.cxx =================================================================== --- rt^3/trunk/src/GeometryService/netMsg/NetMsg.cxx 2009-02-05 19:38:37 UTC (rev 33677) +++ rt^3/trunk/src/GeometryService/netMsg/NetMsg.cxx 2009-02-05 20:20:20 UTC (rev 33678) @@ -102,17 +102,17 @@ { try { //deserialize Header - *ds >> this->msgType; - *ds >> this->msgUUID; - *ds >> this->reUUID; + this->msgType = ds->readUInt(); + this->msgUUID = ds->readString(); + this->reUUID = ds->readString(); + + if (!this->_deserialize(ds)) + { + //Error here. + } } catch (IOException ioe) { - std::cerr << "Error: " << ioe.getMessage() << std::endl; + std::cerr << "Error in NetMsg(): " << ioe.getMessage() << std::endl; } - - if (!this->_deserialize(ds)) - { - //Error here. - } } Modified: rt^3/trunk/src/io/DataStream.cxx =================================================================== --- rt^3/trunk/src/io/DataStream.cxx 2009-02-05 19:38:37 UTC (rev 33677) +++ rt^3/trunk/src/io/DataStream.cxx 2009-02-05 20:20:20 UTC (rev 33678) @@ -442,6 +442,9 @@ uInt i = 0; i |= *((uInt*)pos); i = (uInt)ntohl(i); + + //std::cout << "Peaked a uInt of " << i << "\n"; + return i; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |