Example #1
0
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;
}
Example #2
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;
			}
		}
	}

}
Example #3
0
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;
}
Example #4
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  );
  }
}
Example #7
0
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;
}