void WebTask::Terminate( void ) { // Delete Session if ( hSession != NULL ) { InternetCloseHandle( hSession ); hSession = NULL; } errstr[0] = 0; req_url[0] = 0; // Clear headers if ( req_header != NULL ) { free( req_header ); req_header = NULL; } ClearVarData(); ClearPostData(); }
void WebTask::setData( int id, char *str ) { // データ文字列の取得 // switch( id ) { case HTTPINFO_DATA: ClearVarData(); // 結果データをクリアする break; case HTTPINFO_ERROR: SetError( str ); // エラー文字列 break; default: break; } return; }
void CzHttp::Terminate( void ) { // Delete Session if ( pt != NULL ) { free( pt ); pt = NULL; } if ( hSession != NULL ) { InternetCloseHandle( hSession ); hSession = NULL; } errstr[0] = 0; req_url[0] = 0; req_path[0] = 0; down_path[0] = 0; // Clear headers if ( req_header != NULL ) { free( req_header ); req_header = NULL; } ClearVarData(); }
void main(void) { motor_fan_con(0); buzzer_led(0); init_sys(); LcdInitiate(); //调用LCD初始化函数 Delay1ms(2); WriteInstruction(0x01);//清显示:清屏幕指令 DisMenuInit(); mo_forword_slow(); //调用慢速档 while(!CarTurnLeft) { //AB段行驶 if (DeviateLeftTrack) { mo_R_forword_slow(); } if(DeviateRightTrack) { mo_L_forword_slow(); } if (CHECK_COIN) { //检测硬币 Delay1ms(5); if (CHECK_COIN) { mo_stop(); buzzer_led(1); Delay1ms(500); mo_forword_slow(); buzzer_led(0); Delay1ms(130); //不能太小,不能太大,太小会冲出跑道,小了会多次检测! if (!CHECK_COIN) { count_coin++; } } } if (count_kk>=50&&count_kk<51) { //变量显示稳定控制 ClearVarData(); WriteVarData(0x05,mo_time); WriteVarData(0x0d,total_length); WriteVarData(0x45,count_coin); WriteVarData(0x4d,count_bottle); } } while(1){ if (DeviateLeftTrack) { mo_R_forword(); } if(DeviateRightTrack) { mo_L_forword(); } /*转角声控报警之奇淫巧技*/ if((total_length >= 80 && total_length <= 110) ||\ (total_length >= 190 && total_length <= 230) ||\ (total_length >= 300 && total_length <= 360)){ if(CarTurnLeft){ mo_left(); buzzer_led(1); Delay1ms(20); buzzer_led(0); } if (CarTurnRight) { mo_right(); buzzer_led(1); Delay1ms(20); buzzer_led(0); } } else { if(CarTurnLeft){ mo_left(); Delay1ms(20); buzzer_led(0); } if (CarTurnRight) { mo_right(); Delay1ms(20); buzzer_led(0); } } if (UpBottle) { //瓶子检测 motor_fan_con(0); buzzer_led(1); Delay1ms(200); buzzer_led(0); if (NoBottle) { count_bottle++; } } if (DownBottle) { Delay1ms(2); if (DownBottle) { mo_stop(); motor_fan_con(1); Delay1ms(250); mo_forword(); motor_fan_con(0); } if (NoBottle) { count_bottle++; motor_fan_con(0); } } if (total_length>=430||mo_time>=90) { //终点 mo_stop(); Delay1ms(20); ClearVarData(); WriteVarData(0x05,mo_time); WriteVarData(0x0d,total_length); WriteVarData(0x45,count_coin); WriteVarData(0x4d,count_bottle); EA = 0; while (1) { mo_stop(); } } if (count_kk>=50&&count_kk<51) { //变量显示稳定控制 ClearVarData(); WriteVarData(0x05,mo_time); WriteVarData(0x0d,total_length); WriteVarData(0x45,count_coin); WriteVarData(0x4d,count_bottle); } } }
int CzHttp::Exec( void ) { // 毎フレーム実行 // static char hdr[] = "Content-Type: application/x-www-form-urlencoded\r\n"; char req_name[1024]; char *name; BOOL res; switch( mode ) { case CZHTTP_MODE_REQUEST: // httpに接続 strcpy( req_name, req_url ); strcat( req_name, req_path ); hService = InternetOpenUrl( hSession, req_name, req_header, -1L, 0, INTERNET_FLAG_RELOAD ); if ( hService == NULL ) { SetError( "無効なURLが指定されました" ); break; } mode = CZHTTP_MODE_REQSEND; case CZHTTP_MODE_REQSEND: name = down_path; if ( name[0] == 0 ) name = req_path; fp = fopen( name, "wb"); if ( fp == NULL ) { SetError( "ダウンロードファイルが作成できません" ); break; } size = 0; mode = CZHTTP_MODE_DATAWAIT; case CZHTTP_MODE_DATAWAIT: { DWORD dwBytesRead = INETBUF_MAX; if ( InternetReadFile( hService, buf, INETBUF_MAX, &dwBytesRead ) == 0 ) { fclose( fp ); InternetCloseHandle( hService ); SetError( "ダウンロード中にエラーが発生しました" ); break; } if( dwBytesRead == 0 ) { mode = CZHTTP_MODE_DATAEND; break; } fwrite( buf, dwBytesRead, 1, fp ); size += dwBytesRead; break; } case CZHTTP_MODE_DATAEND: fclose( fp ); InternetCloseHandle( hService ); mode = CZHTTP_MODE_READY; break; case CZHTTP_MODE_VARREQUEST: strcpy( req_name, req_url2 ); strcat( req_name, req_path ); // HTTPに接続 hHttpSession = ::InternetConnectA( hSession, varserver, varport, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0 ); if ( hHttpSession == NULL ) { SetError( "無効なサーバーが指定されました" ); break; } // HTTP要求の作成 hHttpRequest = ::HttpOpenRequestA( hHttpSession, varstr, req_name, HTTP_VERSION, NULL, NULL, INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_UI, 0 ); if ( hHttpSession == NULL ) { SetError( "無効なURLが指定されました" ); break; } mode = CZHTTP_MODE_VARREQSEND; // FALL THROUGH case CZHTTP_MODE_VARREQSEND: // 作成したHTTP要求の発行 if ( postdata != NULL ) { char *additional_header = req_header != NULL ? req_header : ""; char *header = (char *)malloc( strlen(hdr) + strlen(additional_header) + 1 ); strcpy(header, hdr); strcat(header, additional_header); res = ::HttpSendRequestA( hHttpRequest, header, -1L, postdata, (int)strlen(postdata) ); free(header); } else { res = ::HttpSendRequestA( hHttpRequest, req_header, -1L, NULL, 0 ); } if ( res == false ) { InternetCloseHandle( hHttpSession ); SetError( "リクエストができませんでした" ); break; } /* { // 返されたコンテンツの長さを取得 DWORD dwSize = INETBUF_MAX; *buf = 0; res = HttpQueryInfo( hHttpRequest, HTTP_QUERY_CONTENT_LENGTH, buf, &dwSize, 0 ); if ( res == false ) { InternetCloseHandle( hHttpRequest ); InternetCloseHandle( hHttpSession ); SetError( "データサイズ取得ができませんでした" ); break; } varsize = atoi(buf); if ( varsize == 0 ) { InternetCloseHandle( hHttpRequest ); InternetCloseHandle( hHttpSession ); SetError( "ダウンロードできませんでした" ); break; } } */ varsize = 0x40000; ClearVarData(); vardata = (char *)malloc( varsize ); size = 0; mode = CZHTTP_MODE_VARDATAWAIT; // FALL THROUGH case CZHTTP_MODE_VARDATAWAIT: { DWORD dwBytesRead; int needed_size = size + INETBUF_MAX + 1; if ( needed_size > varsize ) { while ( needed_size > varsize ) { varsize *= 2; } vardata = (char *)realloc( vardata, varsize ); } if ( InternetReadFile( hHttpRequest, vardata+size, INETBUF_MAX, &dwBytesRead ) == 0 ) { InternetCloseHandle( hHttpRequest ); InternetCloseHandle( hHttpSession ); SetError( "ダウンロード中にエラーが発生しました" ); break; } size += dwBytesRead; if( dwBytesRead == 0 ) { mode = CZHTTP_MODE_VARDATAEND; vardata[size] = 0; break; } break; } case CZHTTP_MODE_VARDATAEND: InternetCloseHandle( hHttpRequest ); InternetCloseHandle( hHttpSession ); mode = CZHTTP_MODE_READY; break; case CZHTTP_MODE_INFOREQ: strcpy( req_name, req_url ); strcat( req_name, req_path ); hService = InternetOpenUrl( hSession, req_name, req_header, -1L, 0, 0 ); if ( hService == NULL ) { SetError( "無効なURLが指定されました" ); break; } mode = CZHTTP_MODE_INFORECV; case CZHTTP_MODE_INFORECV: { DWORD dwSize = INETBUF_MAX; buf[0] = 0; HttpQueryInfo( hService, HTTP_QUERY_RAW_HEADERS_CRLF, buf, &dwSize, 0 ); InternetCloseHandle( hService ); mode = CZHTTP_MODE_READY; break; } case CZHTTP_MODE_FTPREADY: return 2; case CZHTTP_MODE_FTPDIR: { char tx[512]; char dname[64]; char *fname; SYSTEMTIME t; fname = finddata.cFileName; if( finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { strcpy( dname, "<DIR>" ); } else { sprintf( dname, "%d", finddata.nFileSizeLow ); } FileTimeToSystemTime( &finddata.ftLastWriteTime,&t ); sprintf( tx, "\"%s\",%s,%4d/%02d/%02d,%02d:%02d:%02d\r\n", fname, dname, t.wYear, t.wMonth, t.wDay, t.wHour, t.wMinute, t.wSecond ); AddFlexBuf( tx, (int)strlen(tx) ); if ( !InternetFindNextFile( hFtpEnum, &finddata ) ) { InternetCloseHandle( hFtpEnum ); mode = CZHTTP_MODE_FTPREADY; } break; } case CZHTTP_MODE_FTPREAD: break; case CZHTTP_MODE_FTPWRITE: break; case CZHTTP_MODE_FTPCMD: { char tx[1024]; DWORD dwBytesRead; if( InternetReadFile( hResponse, buf, 1024, &dwBytesRead ) ) { AddFlexBuf( tx, dwBytesRead ); } if ( dwBytesRead == 0 ) { InternetCloseHandle( hResponse ); mode = CZHTTP_MODE_FTPREADY; } break; } case CZHTTP_MODE_FTPRESULT: GetFtpResponse(); break; case CZHTTP_MODE_ERROR: return -1; default: return 1; } return 0; }
int WebTask::Exec( void ) { // 毎フレーム実行 // static char hdr[] = "Content-Type: application/x-www-form-urlencoded\r\n"; BOOL res; switch( mode ) { case CZHTTP_MODE_VARREQUEST: // HTTPに接続 hHttpSession = ::InternetConnectA( hSession, varserver, varport, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0 ); if ( hHttpSession == NULL ) { SetError( "無効なサーバーが指定されました" ); break; } // HTTP要求の作成 hHttpRequest = ::HttpOpenRequestA( hHttpSession, varstr, req_url, HTTP_VERSION, NULL, NULL, INTERNET_FLAG_RELOAD|INTERNET_FLAG_NO_UI, 0 ); if ( hHttpSession == NULL ) { SetError( "無効なURLが指定されました" ); break; } mode = CZHTTP_MODE_VARREQSEND; // FALL THROUGH case CZHTTP_MODE_VARREQSEND: // 作成したHTTP要求の発行 if ( postdata != NULL ) { char *additional_header = req_header != NULL ? req_header : ""; char *header = (char *)malloc( strlen(hdr) + strlen(additional_header) + 1 ); strcpy(header, hdr); strcat(header, additional_header); res = ::HttpSendRequestA( hHttpRequest, header, -1L, postdata, (int)strlen(postdata) ); free(header); } else { res = ::HttpSendRequestA( hHttpRequest, req_header, -1L, NULL, 0 ); } if ( res == false ) { InternetCloseHandle( hHttpSession ); SetError( "リクエストができませんでした" ); break; } varsize = INETBUF_MAX; ClearVarData(); vardata = (char *)malloc( varsize ); size = 0; mode = CZHTTP_MODE_VARDATAWAIT; // FALL THROUGH case CZHTTP_MODE_VARDATAWAIT: { DWORD dwBytesRead; int needed_size = size + INETBUF_MAX; if ( needed_size > varsize ) { while ( needed_size > varsize ) { varsize *= 2; } vardata = (char *)realloc( vardata, varsize ); } if ( InternetReadFile( hHttpRequest, vardata+size, INETBUF_MAX, &dwBytesRead ) == 0 ) { InternetCloseHandle( hHttpRequest ); InternetCloseHandle( hHttpSession ); SetError( "ダウンロード中にエラーが発生しました" ); break; } size += dwBytesRead; if( dwBytesRead == 0 ) { mode = CZHTTP_MODE_VARDATAEND; vardata[size] = 0; break; } break; } case CZHTTP_MODE_VARDATAEND: InternetCloseHandle( hHttpRequest ); InternetCloseHandle( hHttpSession ); mode = CZHTTP_MODE_READY; break; case CZHTTP_MODE_ERROR: return -1; default: return 1; } return 0; }