int doProcess(CTcpSocket &acpsocket) { int ret = 0; int send_len = 0; char recv_buf[4096] = ""; char send_buf[4096] = ""; acpsocket.Recv(recv_buf, sizeof(recv_buf), g_para.bank_timeout); ret=strlen(recv_buf); writelog(LOG_INFO,"len[%d],recv_buf[%s]\n",ret,recv_buf); ret = doResponse(recv_buf,strlen(recv_buf),send_buf,send_len); if(ret) { if(ret>0) return ret; } send_buf[send_len]=0; writelog(LOG_INFO,"len[%d],send_buf[%s]\n",send_len,send_buf); ret = acpsocket.Send(send_buf,send_len); if(ret != send_len) { writelog(LOG_ERR,"发送数据错误\n"); return -1; } return 0; }
void Doctor::attendPatient() { // if (travellingToResident) { //This is here so that it will compile. Get rid of when uncommenting goToNode() if (goToNode("Resident0")) { travellingToResident = false; treating = true; first = true; } return; } else if (treating) { //Send message to patient to rise health stats if (first) { requestLock("Doctor"); first = false; } if (haveLock) { //Treat resident if (!(healthLevel >= 99)) { doResponse("health"); counterHealthTimes++; if (counterHealthTimes > 35){ goHome = true; treating = false; homeVisit = false; } } else { goHome = true; treating = false; homeVisit = false; } } else if (deniedLock) { if (otherUnlocked) { requestLock("Doctor"); deniedLock = false; otherUnlocked = false; } } } }
int doProcess(CTcpSocket &acpsocket) { printf("\n doProcess3 \n"); int ret = 0; int pack_len = 0; int send_len = 0; char recv_buf[4096] = ""; char send_buf[4096] = ""; //ret = acpsocket.Recv(recv_buf, HEAD_LEN, g_para.bank_timeout); //ret = acpsocket.Recv(recv_buf, 2048, g_para.bank_timeout); //ret = acpsocket.Recv(recv_buf, sizeof(recv_buf), g_para.bank_timeout); acpsocket.Recv(recv_buf, sizeof(recv_buf), g_para.bank_timeout); ret=strlen(recv_buf); printf("\n recv_buf[%s] \n len[%d] ret[%d]\n",recv_buf,strlen(recv_buf),ret); // if(ret != HEAD_LEN) // { // writelog(LOG_ERR,"接收银行数据包头错误\n"); // return -1; // } // pack_len = atoi(recv_buf); // ret = acpsocket.Recv(recv_buf, pack_len, g_para.bank_timeout); // if(ret != pack_len) // { // writelog(LOG_ERR,"接收银行数据包体错误\n"); // return -1; // } // recv_buf[pack_len]=0; writelog(LOG_INFO,"len[%d],recv_buf[%s]\n",ret,recv_buf); ret = doResponse(recv_buf,pack_len,send_buf,send_len); if(ret) { if(ret>0) return ret; } send_buf[send_len]=0; writelog(LOG_INFO,"len[%d],send_buf[%s]\n",send_len,send_buf); ret = acpsocket.Send(send_buf,send_len); if(ret != send_len) { writelog(LOG_ERR,"发送数据错误\n"); return -1; } return 0; }
int doProcess(CTcpSocket &acpsocket) { int ret = 0; int pack_len = 0; int send_len = 0; char recv_buf[256] = ""; char send_buf[256] = ""; ret = acpsocket.Recv(recv_buf, HEAD_LEN, g_para.bank_timeout); if(ret != HEAD_LEN) { writelog(LOG_ERR,"接收银行数据包头错误\n"); return -1; } pack_len = atoi(recv_buf); ret = acpsocket.Recv(recv_buf, pack_len, g_para.bank_timeout); if(ret != pack_len) { writelog(LOG_ERR,"接收银行数据包体错误\n"); return -1; } recv_buf[pack_len]=0; writelog(LOG_INFO,"len[%d],recv_buf[%s]\n",ret,recv_buf); ret = doResponse(recv_buf,pack_len,send_buf,send_len); if(ret) { if(ret>0) return ret; } send_buf[send_len]=0; writelog(LOG_INFO,"len[%d],send_buf[%s]\n",strlen(send_buf),send_buf); ret = acpsocket.Send(send_buf,send_len); if(ret != send_len) { writelog(LOG_ERR,"发送数据错误\n"); return -1; } return 0; }
int main( void ) { int c; u8 pos = 0; // Position in buffer u8 atstate = WAITING_FOR_A; // AT-state initHardware(); uart0Init( B115200 ); //uart0Init(B2x115200); // Double speed sja1000_init(); sei(); uart0BlockingPuts( "\r\n" IDSTR "\r\n" ); for ( ;; ) { // Give the dog a bone wdt_reset(); if ( -1 != ( c = uart0Getch() ) ) { if ( OFF_LINE == gmode ) { // echo character uart0BlockingPutch( c ); if ( WAITING_FOR_A == atstate ) { c &= ~0x20; // -> upper case if ( 'A' == c ) { atstate = WAITING_FOR_T; } } else if ( WAITING_FOR_T == atstate ) { c &= ~0x20; // -> upper case if ( 'T' == c ) { atstate = WAITING_FOR_CR; pos = 0; } else if ( ( '/' & ~0x20 ) == c ) { // "a/" // Redo last command doCommand(); atstate = WAITING_FOR_A; } } else if ( WAITING_FOR_CR == atstate ) { // CR if ( 0x0d == c ) { gbuffer[ pos ] = 0x00; doCommand(); atstate = WAITING_FOR_A; } // Backspace else if ( 0x08 == c ) { if ( pos ) pos -= 1; } // Space else if ( 0x20 == c ) { ; // Ignore } // Tab else if ( 0x09 == c ) { ; // Ignore } else { gbuffer[ pos++ ] = c; if ( pos >= SIZE_INPUT_BUFFER ) { // Buffer FULL doResponse( FALSE, 0 ); atstate = WAITING_FOR_A; } } } else { // Invalid state doResponse( FALSE, 0 ); atstate = WAITING_FOR_A; } } else { // ON_LINE // Packet are just transfered over the // line } } // Character } // Main loop return 0; }
void doCommand( void ) { int rv = 0; switch( ( *gbuffer & ~0x20 ) ) { // AT<CR> case 0x00: // OK break; // Autobaud detection case 'A': rv = cmd_autobaud(); break; // Set Baudrate case 'B': rv = cmd_baudrate(); break; case 'C': // { char buf[20]; int rr; *buf = 0; rr = getNumericValue( ( gbuffer + 1 ) ); itoa( rr, buf, 10 ); uart0BlockingPutch( ' ' ); uart0BlockingPuts( buf ); } break; case 'D': // Dial - Go online rv = cmd_online(); break; case 'E': // Turn on/off echo rv = cmd_echo(); break; case 'F': // Set Filter/Mask rv = cmd_filter(); break; case 'G': // Send Burst n - number of messages. sz - delay between frames rv = cmd_sendBurst(); break; case 'H': // Hook - Go online rv = cmd_online(); break; case 'I': // Information rv = cmd_info(); break; case 'J': rv = -1; // Not implemented break; case 'K': { canmsg_t msg; msg.id = 0x334; msg.length = 2; msg.data[ 0 ] = 1; msg.data[ 1 ] = 2; msg.flags |= MSG_EXT; //if ( !sja1000_sendMsg( &msg ) ) { //doResponse( FALSE, 0 ); //} if ( !sja1000_writeMsgToBuf( &msg ) ) { rv = -1; // Not implemented; } rv = 0; } break; case 'L': // Go online in Listen only mode rv = cmd_listen(); break; case 'M': rv = -1; // Not implemented break; case 'N': rv = -1; // Not implemented break; case 'O': rv = -1; // Not implemented break; case 'P': rv = -1; // Not implemented break; case 'Q': // Quite rv = cmd_quite(); break; case 'R': // Read message rv = cmd_readmsg(); break; case 'S': // Set/read registers rv = cmd_register(); break; case 'T': rv = -1; // Not implemented break; case 'U': rv = -1; // Not implemented break; case 'V': // Verbal rv = cmd_verbal(); break; case 'W': // Write message rv = cmd_writemsg(); break; case 'X': rv = -1; // Not implemented break; case 'Y': rv = -1; // Not implemented break; case 'Z': // Reset device rv = cmd_reset(); break; case '?': // Get statistics rv = -1; // Not implemented break; default: // Uknown command rv = -1; // Not implemented break; } // Print out response if ( 0 == rv ) { doResponse( TRUE, rv ); } else { doResponse( FALSE, rv ); } }
int doProcess(CTcpSocket &acpsocket) { printf("\n doProcess3 \n"); int ret = 0; int pack_len = 0; int send_len = 0; char recv_buf[4096] = ""; char send_buf[4096] = ""; //ret = acpsocket.Recv(recv_buf, HEAD_LEN, g_para.bank_timeout); //ret = acpsocket.Recv(recv_buf, 2048, g_para.bank_timeout); //ret = acpsocket.Recv(recv_buf, sizeof(recv_buf), g_para.bank_timeout); acpsocket.Recv(recv_buf, sizeof(recv_buf), g_para.bank_timeout); ret=strlen(recv_buf); printf("\n recv_buf[%s] \n len[%d] ret[%d]\n",recv_buf,strlen(recv_buf),ret); // if(ret != HEAD_LEN) // { // writelog(LOG_ERR,"接收银行数据包头错误\n"); // return -1; // } // pack_len = atoi(recv_buf); // ret = acpsocket.Recv(recv_buf, pack_len, g_para.bank_timeout); // if(ret != pack_len) // { // writelog(LOG_ERR,"接收银行数据包体错误\n"); // return -1; // } // recv_buf[pack_len]=0; writelog(LOG_INFO,"len[%d],recv_buf[%s]\n",ret,recv_buf); ret = doResponse(recv_buf,strlen(recv_buf),send_buf,send_len); if(ret) { if(ret>0) return ret; } send_buf[send_len]=0; writelog(LOG_INFO,"len[%d],send_buf[%s]\n",send_len,send_buf); printf("\n xxxxxxxxxxxxxxxxx \nsend_buf[%s]\nsend_len[%d]\n xxxxxxxxxxxxxxxx\n",send_buf); ret = acpsocket.Send(send_buf,send_len); //ret = acpsocket.Send("1234",4); /* int ret=0; int send_len=strlen(send_buf); char buf[2048]={0}; ret=SockNode->Send(send_buf,send_len); if (ret<=0) { SockNode->Close(); set_msg_log(szMsg,"发送数据至银行出错,错误代码[%d]\n",ret); return false; } */ if(ret != send_len) { writelog(LOG_ERR,"发送数据错误\n"); return -1; } return 0; }
void __cdecl handleConnection(void *param) { SOCKET clientSocket = (SOCKET)param; // Receive until the peer shuts down the connection // recv spooling borrowed from http://stackoverflow.com/a/6090610 // in a loop, we recv() off the network, handle complete lines, then shift the remainder down char recvbuf[RECVBUFSIZE] = { '\0' }; size_t recvbufUsed = 0; const char* msgPleaseSendShorterLines = "Please send shorter lines."; const char* msgBye = "Bye!"; while (1) { // establish how much room we have left in recvbuf size_t buf_remain = sizeof(recvbuf) - recvbufUsed; // check that we still have room for another recv if (buf_remain < 1) { printf("[!] recvbuf exhausted. Giving up.\n"); send(clientSocket, msgPleaseSendShorterLines, strlen(msgPleaseSendShorterLines), 0); break; } // recv() up to buf_remain bytes, put them after pending data in recvbuf int result = recv(clientSocket, (void*)&recvbuf[recvbufUsed], buf_remain, 0); if (result == 0) { printf("Client disconnected.\n"); break; } else if (result < 0) { printf("recv() failed: %d.\n", WSAGetLastError()); break; } printf("Bytes received: %d\n", result); // we're now using more of recvbuf than we were before recvbufUsed += result; // starting at recvbuf[0] look for newlines, pass each found line off to doResponse() char *line_start = recvbuf; char *line_end; while ((line_end = (char*)memchr((void*)line_start, '\n', recvbufUsed - (line_start - recvbuf))) != 0) { // we found a line // null-terminate it *line_end = '\0'; // if the user is done with us, disconnect them if (strcmp(line_start, "exit") == 0) { printf("Client requested exit.\n"); send(clientSocket, msgBye, strlen(msgBye), 0); closesocket(clientSocket); return; } // process the line doResponse(clientSocket, line_start); // continue looking for lines from after the now-processed line line_start = line_end + 1; } // having (perhaps) processed some data we are (perhaps) using less of recvbuf than we were before recvbufUsed -= (line_start - recvbuf); // slide unprocessed data down to start of recvbuf memmove_s(recvbuf, sizeof(recvbuf), line_start, recvbufUsed); } closesocket(clientSocket); return; }