1 #ifndef SZA_UTIL_CLIENTTASK_H
2 #define SZA_UTIL_CLIENTTASK_H
15 #include "carma/szautil/Runnable.h"
30 ClientTask(
bool spawn, std::string host,
unsigned connectPort,
31 unsigned readBufSize=0,
unsigned sendBufSize=0) :
33 initMembers(host, connectPort, readBufSize, sendBufSize);
39 virtual ~ClientTask() {
47 void initMembers(std::string host,
unsigned port,
48 unsigned readBufSize,
unsigned sendBufSize) {
52 handler_.installReadHandler(readHandler, (
void*)
this);
53 handler_.installSendHandler(sendHandler, (
void*)
this);
55 handler_.installReadErrorHandler(errHandler, (
void*)
this);
56 handler_.installSendErrorHandler(errHandler, (
void*)
this);
60 timeOut_.setSeconds(0);
61 timeOutPtr_ = timeOut_.timeVal();
72 GenericTask<Msg>::fdSet_.clearFromReadFdSet(handler_.getReadFd());
73 GenericTask<Msg>::fdSet_.clearFromWriteFdSet(handler_.getSendFd());
79 timeOut_.setSeconds(1);
80 timeOutPtr_ = timeOut_.timeVal();
88 if(tcp_.connectToServer(
true) > 0) {
89 handler_.attach(tcp_.getFd());
90 GenericTask<Msg>::fdSet_.registerReadFd(handler_.getReadFd());
94 timeOut_.setSeconds(1);
104 void sendServerData(NetDat& dat) {
105 std::vector<unsigned char>& data = dat.getSerializedData();
106 unsigned datSize = data.size();
111 if(datSize+8 > sendBufSize_)
112 setSendBufSize(datSize + 8);
114 handler_.getSendStr()->startPut(data.size());
115 handler_.getSendStr()->putChar(data.size(), &data[0]);
116 handler_.getSendStr()->endPut();
120 GenericTask<Msg>::fdSet_.registerWriteFd(handler_.getSendFd());
128 static NET_READ_HANDLER(readHandler) {
129 ClientTask* client = (ClientTask*)arg;
130 client->readServerData(client->handler_);
138 static NET_SEND_HANDLER(sendHandler) {
139 ClientTask* client = (ClientTask*)arg;
140 client->fdSet_.clearFromWriteFdSet(client->handler_.getSendFd());
148 static NET_ERROR_HANDLER(errHandler) {
149 ClientTask* client = (ClientTask*)arg;
150 client->disconnect();
157 virtual void serviceMsgQ() {
165 if((nready=select(GenericTask<Msg>::fdSet_.size(),
166 GenericTask<Msg>::fdSet_.readFdSet(),
167 GenericTask<Msg>::fdSet_.writeFdSet(),
168 NULL, timeOutPtr_)) < 0)
170 ThrowSysError(
"select()");
177 if(GenericTask<Msg>::fdSet_.isSetInRead(handler_.getReadFd()))
182 if(GenericTask<Msg>::fdSet_.isSetInWrite(handler_.getSendFd()))
187 if(GenericTask<Msg>::fdSet_.isSetInRead(GenericTask<Msg>::msgq_.fd())) {
188 processTaskMsg(&stop_);
197 void setReadBufSize(
unsigned size) {
198 handler_.setReadBuffer(0, size);
202 void setSendBufSize(
unsigned size) {
203 handler_.setSendBuffer(0, size);
207 void readServerData(NetHandler& handler) {
210 handler.getReadStr()->startGet(&size);
221 if(size > bytes_.size()) {
225 handler.getReadStr()->getChar(size, &bytes_[0]);
226 handler.getReadStr()->endGet();
228 sizeInBytesOfLastMessage_ = size;
233 virtual void processTaskMsg(
bool* stop) {
237 virtual void processServerData() {COUT(
"Inside base-class procesServerData");};
240 struct timeval* timeOutPtr_;
244 std::vector<unsigned char> bytes_;
250 unsigned sizeInBytesOfLastMessage_;
252 unsigned sendBufSize_;
253 unsigned readBufSize_;
269 #endif // End #ifndef SZA_UTIL_CLIENTTASK_H
Tagged: Wed Jul 6 13:41:09 PDT 2005.
Tagged: Sun Apr 4 22:36:40 UTC 2004.
Tagged: Fri Nov 14 12:39:38 UTC 2003.
SpawnableTask(bool spawn)
Constructor.
virtual void processTaskMsg(bool *stop)
Process a message received on our message queue.
Started: Sat Mar 6 14:44:17 UTC 2004.
......................................................................
Started: Thu Feb 26 22:08:23 UTC 2004.
Tagged: Fri Nov 14 12:39:33 UTC 2003.
Tagged: Fri Jan 26 16:49:57 NZDT 2007.