static void* recvDataLoop(void *arg) { StreamSocket *ss =(StreamSocket *)arg; if(NULL == ss) { cerr << "recvDataLoop arg is NULL"<<__LINE__<<endl; return NULL; } cout <<"###@@@enter recvDataLoop@@@@### ip:"<< ss->getRemoteIP()<<":"<< ss->getRemotePort()<<endl; StreamSocket sock = StreamSocket(ss->getRemoteSocket(), ss->getRemoteIP(), ss->getRemotePort()); char buff[RECV_BUFFSIZE]; int len; while(1) { len = sock.receive(sock.getRemoteSocket(), buff, sizeof(buff), 45); if(len > 0) { if(-1 == streamSocketCommandProcess(sock, buff)) { cout<<"\n nsStreamSocketCommandProcess send fail!:"<<endl; // break; } } } cerr<<"\n###########@@@@@@@@@ exit @@@@@@@@############### \n"; sock.close(sock.getRemoteSocket()); return NULL; }
static int streamSocketCommandProcess(StreamSocket &ssocket, char *command) { if('\0' == command[0]) //????????? { return 0xff; } StreamPrivatePacket spp; vector<char *> strvec = spp.parse(command, STREAM_PACKET_SPLIT); if(strvec.size() <= 0) { cerr<<"streamSocketCommandProcess strvec.size() <= 0" <<endl; return 0xfe; } int ret = 0; string response; switch(atoi(strvec[0])) { case EN_CMD_ISONLINE: response=strvec[0]; response += ">>"; response += ONLINE; cout << response << endl; //ret = ssocket.send(ssocket.getRemoteSocket(), response); break; case EN_CMD_MEDIA_PLAY: cout << "EN_CMD_MEDIA_PLAY"<< endl; break; case EN_CMD_KEY: cout << "EN_CMD_KEY"<< endl; //deal with key break; case EN_CMD_MUSE: { cout << "EN_CMD_MUSE"<< endl; //deal with mouse } break; case EN_CMD_INPUTSTR: cout << "EN_CMD_INPUTSTR"<< endl; break; default: cout<<"address is" << ssocket.getRemoteIP(); cout<<":" << ssocket.getRemotePort()<< endl; cout <<"command *" <<command << endl; cout<< strvec.size()<<"@ " << strvec[0]<< endl; break; } return ret; }