//================================================================================ //! メソッド名 C3D_MAP::squeezeSortByCameraPositionWithDrawZTexSha // // 機能 絞り込みしながらZテクスチャで描画をし、ソートする // 引数 inCamera カメラ // inViewPoint カメラ視点 // inZTexSha Zテクスチャシェーダ // 更新 2009/01/31 <新規> //================================================================================ void C3D_MAP::squeezeSortByCameraPositionWithDrawZTexSha( C3D_OBJECT* inCamera, VEC3* inViewPoint, CZTEX_SHA* inZTexSha) { squeezeBackG.clear(); //!< 絞り込み背景グループの消去 squeezeViewG.clear(); //!< 絞り込み描画グループの消去 vector<C3D_OBJECT*>* c3dObjvec; //!< vectorポインター vector<C3D_OBJECT*>* c3dObjvecSqueeze; //!< 絞り込み背景vectorポインター vector<C3D_OBJECT*>::iterator p; //!< 作業用イテレータ // 背景 c3dObjvecSqueeze = squeezeBackG.getObjects(); c3dObjvec = backG.getObjects(); p = c3dObjvec->begin(); while(p != c3dObjvec->end()) { // オブジェクトのメッセージをチェックして、描画判定 if( checkMessage(&p)) { if( D3DXVec3Length(&(*inViewPoint - (*p)->getLoc())) < fDistance) { (*p)->draw(inZTexSha); c3dObjvecSqueeze->push_back(*p); } p++; } } // 通常 c3dObjvecSqueeze = squeezeViewG.getObjects(); c3dObjvec = viewG.getObjects(); p = c3dObjvec->begin(); while(p != c3dObjvec->end()) { // オブジェクトのメッセージをチェックして、描画判定 if( checkMessage(&p)) { if( D3DXVec3Length(&(*inViewPoint - (*p)->getLoc())) < fDistance) { (*p)->draw(inZTexSha); c3dObjvecSqueeze->push_back(*p); } p++; } } // ソート squeezeBackG.sortByCameraPosition(inCamera); squeezeViewG.sortByCameraPosition(inCamera); }
//================================================================================ //! メソッド名 C3D_MAP::draw // // 機能 描画(見えない物は、描画しない)(ソートしない)(深度バッファシェーダ使用) // 引数 inDepthSha 深度バッファシェーダ // inViewPoint カメラ視点 // 更新 2008/12/14 <新規> //================================================================================ void C3D_MAP::draw(CDEPTH_SHA* inDepthSha, VEC3* inViewPoint) { vector<C3D_OBJECT*>* c3dObjvec; //!< vectorポインター vector<C3D_OBJECT*>::iterator p; //!< 作業用イテレータ // 検査しながら描画するため、とりだして描画 // 背景描画 c3dObjvec = backG.getObjects(); p = c3dObjvec->begin(); while(p != c3dObjvec->end()) { // オブジェクトのメッセージをチェックして、描画判定 if( D3DXVec3Length(&(*inViewPoint - (*p)->getLoc())) < fDistance) { (*p)->draw(inDepthSha); } p++; } // 通常描画 c3dObjvec = viewG.getObjects(); p = c3dObjvec->begin(); while(p != c3dObjvec->end()) { // オブジェクトのメッセージをチェックして、描画判定 if( checkMessage(&p)) { if( D3DXVec3Length(&(*inViewPoint - (*p)->getLoc())) < fDistance) { (*p)->draw(inDepthSha); } p++; } } }
void App::mainLoop() { // when i use GetMessage and if here is true, then the window cannot update itself in time. // to fix this bug, just not to wait the message. //while( !checkMessage( true ) ) while( !checkMessage( false ) ) { Sleep( 1 ); } }
void D11State::draw() { clock_t t = clock(); float elapsed = static_cast<float>(t - timeT) / CLOCKS_PER_SEC; ++frameCount; if (elapsed > OVERLAY_FPS_INTERVAL) { OverlayMsg om; om.omh.uiMagic = OVERLAY_MAGIC_NUMBER; om.omh.uiType = OVERLAY_MSGTYPE_FPS; om.omh.iLength = sizeof(OverlayMsgFps); om.omf.fps = frameCount / elapsed; sendMessage(om); frameCount = 0; timeT = t; } checkMessage(static_cast<unsigned int>(vp.Width), static_cast<unsigned int>(vp.Height)); if (a_ucTexture && pSRView && (uiLeft != uiRight)) { if (!bDeferredContext) { pOrigStateBlock->Capture(); pMyStateBlock->Apply(); } // Set vertex buffer UINT stride = sizeof(SimpleVertex); UINT offset = 0; pDeviceContext->IASetVertexBuffers(0, 1, &pVertexBuffer, &stride, &offset); pDeviceContext->VSSetShader(pVertexShader, NULL, 0); pDeviceContext->GSSetShader(NULL, NULL, 0); pDeviceContext->PSSetShaderResources(0, 1, &pSRView); pDeviceContext->PSSetShader(pPixelShader, NULL, 0); pDeviceContext->DrawIndexed(6, 0, 0); if (bDeferredContext) { ID3D11CommandList *pCommandList; pDeviceContext->FinishCommandList(TRUE, &pCommandList); ID3D11DeviceContext *ctx = NULL; pDevice->GetImmediateContext(&ctx); ctx->ExecuteCommandList(pCommandList, TRUE); ctx->Release(); pCommandList->Release(); } else { pDeviceContext->Flush(); pMyStateBlock->Capture(); pOrigStateBlock->Apply(); } } }
void WSChat::initiateWebSocket() { //ip = "ws://localhost"; ip = "ws://tunnel.vince.im"; port = 8999; websocket = new QtWebsocket::QWsSocket(this, NULL, QtWebsocket::WS_V13); websocket->connectToHost(ip.toUtf8(), port); QObject::connect(websocket, SIGNAL(frameReceived(QString)), this, SLOT(checkMessage(QString))); //set the socket state of dlg and main window socketState = currentSocketState(websocket->state()); //QMessageBox::warning(this, tr(""), socketState, QMessageBox::Yes); ui->infoLabel->setText(socketState); }
//================================================================================ //! メソッド名 C3D_MAP::draw // // 機能 描画 // 引数 inDev Direct3Dデバイス // inCamera カメラオブジェクト // 更新 2008/07/20 <新規> //================================================================================ void C3D_MAP::draw(CONST DEV inDev, C3D_OBJECT* inCamera) { // 並べ替え backG.sortByCameraPosition(inCamera); viewG.sortByCameraPosition(inCamera); vector<C3D_OBJECT*>* c3dObjvec; //!< vectorポインター vector<C3D_OBJECT*>::iterator p; //!< 作業用イテレータ // 検査しながら描画するため、とりだして描画 // 背景描画 c3dObjvec = backG.getObjects(); p = c3dObjvec->begin(); while(p != c3dObjvec->end()) { // オブジェクトのメッセージをチェックして、描画判定 if( checkMessage(&p)) { (*p)->draw(inDev); p++; } } // 通常描画 c3dObjvec = viewG.getObjects(); p = c3dObjvec->begin(); while(p != c3dObjvec->end()) { // オブジェクトのメッセージをチェックして、描画判定 if( checkMessage(&p)) { (*p)->draw(inDev); p++; } } }
void D10State::draw() { clock_t t = clock(); float elapsed = static_cast<float>(t - timeT) / CLOCKS_PER_SEC; ++frameCount; if (elapsed > OVERLAY_FPS_INTERVAL) { OverlayMsg om; om.omh.uiMagic = OVERLAY_MAGIC_NUMBER; om.omh.uiType = OVERLAY_MSGTYPE_FPS; om.omh.iLength = sizeof(OverlayMsgFps); om.omf.fps = frameCount / elapsed; sendMessage(om); frameCount = 0; timeT = t; } dwMyThread = GetCurrentThreadId(); checkMessage(vp.Width, vp.Height); if (a_ucTexture && pSRView && (uiLeft != uiRight)) { HRESULT hr; pOrigStateBlock->Capture(); pMyStateBlock->Apply(); D3D10_TECHNIQUE_DESC techDesc; pTechnique->GetDesc(&techDesc); // Set vertex buffer UINT stride = sizeof(SimpleVertex); UINT offset = 0; pDevice->IASetVertexBuffers(0, 1, &pVertexBuffer, &stride, &offset); hr = pDiffuseTexture->SetResource(pSRView); if (! SUCCEEDED(hr)) ods("D3D10: Failed to set resource"); for (UINT p = 0; p < techDesc.Passes; ++p) { pTechnique->GetPassByIndex(p)->Apply(0); pDevice->DrawIndexed(6, 0, 0); } pOrigStateBlock->Apply(); } dwMyThread = 0; }
int CanBus::writeWaitReadMessage(VSCAN_MSG* msg) { DWORD written,read; VSCAN_MSG sended; int retries=0, right_response = 0; // printf("------------------------------------\n"); // printf("Write messages\n"); // printMessageData(*msg); int status = VSCAN_Write(devHandler,msg,1,&written); VSCAN_Flush(devHandler); if(status != 0) { printf("writeWaitReadMessage() ERROR: El comando no se escribio correctamente\n"); return -1; } if(msg->Id == 0x0) return 1; usleep(2000); memcpy(&sended, msg, sizeof(VSCAN_MSG)); // printf("received\n"); do{ if(VSCAN_Read(devHandler, msg, 1, &read) == 0 and read != 0) { // printMessageData(*msg); right_response = checkMessage(&sended, msg); } usleep(2000); retries++; }while(right_response != 1 and retries < MAX_READ_RETRIES); if(retries >= MAX_READ_RETRIES) { printf("writeWaitReadMessage() ERROR: No se pudo leer la respuesta al comando enviado (retries = %d)\n", retries); printMessageData(sended); return -1; } else { // qDebug()<<"tryed: "<<retries<<endl; // qDebug()<<"good response"; return 1; } }
void CMessageBrokerController::onMessageReceived(Json::Value message) { // Determine message type and process... Json::Value error; if (checkMessage(message, error)) { if (isNotification(message)) { DBG_MSG(("Message is notification!\n")); processNotification(message); } else if (isResponse(message)) { std::string id = message["id"].asString(); std::string method = findMethodById(id); DBG_MSG(("Message is response on: %s\n", method.c_str())); if ("" != method) { if ("MB.registerComponent" == method) { // initialize mControllersIdStart if (message.isMember("result") && message["result"].isInt()) { mControllersIdStart = message["result"].asInt(); } else { DBG_MSG_ERROR(("Not possible to initialize mControllersIdStart!\n")); } } else if ("MB.subscribeTo" == method || "MB.unregisterComponent" == method || "MB.unsubscribeFrom" == method) { //nothing to do for now } else { processResponse(method, message); } } else { DBG_MSG_ERROR(("Request with id %s has not been found!\n", id.c_str())); } } else { DBG_MSG(("Message is request!\n")); processRequest(message); } } else { DBG_MSG_ERROR(("Message contains wrong data!\n")); } }
bool Epoll::handle(int fd){ Client* client = _clients[fd]; if (client->isNew()) { // 新连接,需要websocket握手协议 if(client->openHandshake()) { std::stringstream msg; return true; } } std::string msg = client->receive(); if(msg == "-2" || msg == "-1" || msg == "0"){ epoll_ctl(_epfd, EPOLL_CTL_DEL, client->getFileDescripto(), &_evt); delClient(client); }else{ checkMessage(client, msg); } return true; }
void DevState::draw() { clock_t t = clock(); float elapsed = static_cast<float>(t - timeT) / CLOCKS_PER_SEC; ++frameCount; if (elapsed > OVERLAY_FPS_INTERVAL) { OverlayMsg om; om.omh.uiMagic = OVERLAY_MAGIC_NUMBER; om.omh.uiType = OVERLAY_MSGTYPE_FPS; om.omh.iLength = sizeof(OverlayMsgFps); om.omf.fps = frameCount / elapsed; sendMessage(om); frameCount = 0; timeT = t; } D3DVIEWPORT9 vp; dev->GetViewport(&vp); checkMessage(vp.Width, vp.Height); if (! a_ucTexture || (uiLeft == uiRight)) return; if (! texTexture) { unsigned int l, r, t, b; l = uiLeft; r = uiRight; t = uiTop; b = uiBottom; newTexture(uiWidth, uiHeight); blit(0, 0, uiWidth, uiHeight); uiLeft = l; uiRight = r; uiTop = t; uiBottom = b; setRect(); } dev->SetTexture(0, texTexture); dev->DrawPrimitiveUP(D3DPT_TRIANGLEFAN, 2, vertices, sizeof(D3DTLVERTEX)); }
/************************************************** ** Function: sendMess ** Description: Sends a message to connected clients. ** Parameters: ** int socket - socket identifier, ** char buff - buffer to store message from client ** char usr - client user name. ** Returns: 1 if server user still wants to chat, 0 if they entered '\quit'. **************************************************/ int sendMess(int socket, char* buff, char* usr) { // Write back. bzero(buff, 1000); printf("%s> ", usr); fgets(buff, 1000, stdin); int quit = checkMessage(buff); // \quit was entered. if(quit == 1) { return 0; } packageMess(usr, buff); // Package message to send. int n = send(socket, buff, 1000, 0); if(n < 0) { error("ERROR: error sending back to client.", 1); } return 1; }
int main(int argc, char **argv) { char *device = "/dev/ttySO"; char *address = "127.0.0.1"; int port = 9999; int c; opterr = 0; while ((c = getopt (argc, argv, "hvd:a:p:")) != -1) switch (c) { case 'v': verbose++; break; case 'd': device = optarg; break; case 'a': address = optarg; break; case 'p': port = atoi(optarg); break; case '?': if (optopt == 'd' || optopt == 'a' || optopt == 'p') fprintf (stderr, "Option -%c requires an argument.\n", optopt); else if (isprint (optopt)) fprintf (stderr, "Unknown option `-%c'.\n", optopt); else fprintf (stderr, "Unknown option character `\\x%x'.\n", optopt); return 1; case 'h': default: printUsage(argv[0]); return 1; } // Install signal handlers signal(SIGINT, signalCallbackHandler); int serialport_fd = -1; int udp_fd = -1; // Initialize destination address struct sockaddr_in dest; dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr(address); dest.sin_port = htons(port); #define MAX_DATA_LEN 200 unsigned char buffer[MAX_DATA_LEN]; unsigned char message[MAX_DATA_LEN]; for (;;) { /* * Error tolerant solution. * * Try to open serial port and udp socket on every round, * if open has failed. * */ if ( serialport_fd < 0 ) { // Open the serial port if (verbose) printf("Open serial port: %s\n", device); serialport_fd = open(device, O_RDWR | O_NOCTTY); // | O_NDELAY if (serialport_fd < 0) { fprintf(stderr, "Failed to open %s: %s\n", device, strerror(errno)); //return 1; } // Initialize serial port if (initSerialPort(serialport_fd) == -1) { fprintf(stderr, "Failed to set serial port: %s\n", strerror(errno)); //return 1; } } if ( udp_fd < 0 ) { // Open UDP socket udp_fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (udp_fd < 0) { fprintf(stderr, "Failed to open UDP socket: %s\n", strerror(errno)); //return 1; } if (verbose) printf("UDP address %s:%u\n", address, port); } int start_found = FALSE; int index = 0; /* unsigned char testdata[] = "\x01\x02" \ "\x5C\x00\x20\x6B\x00\x4B" \ "\x5C\x00\x20\x69\x00\x49\xC0\x69\x00\xA9" \ "\x5C\x00\x20\x68\x50\x01\xA8\x1F\x01\x00\xA8\x64\x00\xFD" \ "\xA7\xD0\x03\x44\x9C\x1E\x00\x4F\x9C\xA0\x00\x50\x9C\x78" \ "\x00\x51\x9C\x03\x01\x52\x9C\x1B\x01\x87\x9C\x14\x01\x4E" \ "\x9C\xC6\x01\x47\x9C\x01\x01\x15\xB9\xB0\xFF\x3A\xB9\x4B" \ "\x00\xC9\xAF\x00\x00\x48\x9C\x0D\x01\x4C\x9C\xE7\x00\x4B" \ "\x9C\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00" \ "\x00\x45"; ssize_t len = sizeof(testdata); memcpy( buffer, testdata, len); */ if (serialport_fd > 0) { ssize_t len = 0; while ((len = read(serialport_fd, buffer, MAX_DATA_LEN)) > 0) { for (int i = 0; i < len; i++) { if (verbose) printf("%02X ", buffer[i]); if (start_found == FALSE && buffer[i] == 0x5C) { start_found = TRUE; index = 0; } if (start_found) { if ((index+1) >= MAX_DATA_LEN) { start_found = FALSE; } else { message[index++] = buffer[i]; int msglen = checkMessage(message, index); switch (msglen) { case 0: // Ok, but not ready break; case -1: // Invalid message start_found = FALSE; break; case -2: // Checksum error sendNak(serialport_fd); start_found = FALSE; break; default: if (verbose) printf("Valid message received, len=%u\n", msglen); sendAck(serialport_fd); // send UDP packet if message is a data packet // if data contains 0x5C (start character), message len can be bigger than 0x50 if (buffer[0] == 0x5C && buffer[1] == 0x00 && buffer[2] == 0x20 && buffer[3] == 0x68 && buffer[4] >= 0x50) { if (verbose) printf("Send UDP data to %s:%u\n", address, port); if (verbose) printMessage( message, msglen); if (sendto(udp_fd, message, msglen + 1, 0 , (struct sockaddr *)&dest, sizeof(dest)) == -1) { fprintf(stderr, "Failed to send udp packet: %s\n", strerror(errno)); } } // Wait new message start_found = FALSE; break; } } } } } if (len < 0 ) { if (errno == EINTR) { if (verbose) printf("Interrupted\n"); break; } else { fprintf(stderr, "Read failed: %s\n", strerror(errno)); sleep(1); } } else if (len == 0) { if (verbose) printf("Read return 0\n"); } } else { sleep(1); } } close(serialport_fd); close(udp_fd); return 0; }
void Context::draw(HDC hdc) { // DEBUG // sm->bDebug = true; clock_t t = clock(); float elapsed = static_cast<float>(t - timeT) / CLOCKS_PER_SEC; ++frameCount; if (elapsed > OVERLAY_FPS_INTERVAL) { OverlayMsg om; om.omh.uiMagic = OVERLAY_MAGIC_NUMBER; om.omh.uiType = OVERLAY_MSGTYPE_FPS; om.omh.iLength = sizeof(OverlayMsgFps); om.omf.fps = frameCount / elapsed; sendMessage(om); frameCount = 0; timeT = t; } unsigned int width, height; width = oGetDeviceCaps(hdc, HORZRES); height = oGetDeviceCaps(hdc, VERTRES); HWND hwnd = WindowFromDC(hdc); if (hwnd) { RECT r; if (GetClientRect(hwnd, &r)) { width = r.right - r.left; height = r.bottom - r.top; } } ods("OpenGL: DrawStart: Screen is %d x %d", width, height); checkMessage(width, height); oglViewport(0, 0, width, height); oglMatrixMode(GL_PROJECTION); oglLoadIdentity(); oglOrtho(0, width, height, 0, -100.0, 100.0); oglMatrixMode(GL_MODELVIEW); oglBindTexture(GL_TEXTURE_2D, texture); oglPushMatrix(); oglLoadIdentity(); float w = static_cast<float>(uiWidth); float h = static_cast<float>(uiHeight); float left = static_cast<float>(uiLeft); float top = static_cast<float>(uiTop); float right = static_cast<float>(uiRight); float bottom = static_cast<float>(uiBottom); float xm = (left) / w; float ym = (top) / h; float xmx = (right) / w; float ymx = (bottom) / h; oglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); oglBegin(GL_QUADS); oglTexCoord2f(xm, ymx); oglVertex2f(left, bottom); oglTexCoord2f(xm, ym); oglVertex2f(left, top); oglTexCoord2f(xmx, ym); oglVertex2f(right, top); oglTexCoord2f(xmx, ymx); oglVertex2f(right, bottom); oglEnd(); oglPopMatrix(); }
int main(){ pid_t pid; int fluxo, msgKind; char userName[50]; char *bufferRcv, *_bufferRcv, *msgContent; struct userList _users; struct messageList _messages; int localSocket,remoteSocket,structSize; struct sockaddr_in local; struct sockaddr_in remote; //Inicio da execução system("clear"); //Apagando todos os dados de seções passadas deleteFile(); //Criando diretórios necessários makeDirectory(); //Mensagem de inicio printf("Servidor iniciado\n"); //Configurações do socket local //Mais detalhes consulte as manpages localSocket = socket(AF_INET, SOCK_STREAM, 0); if(localSocket == -1) errorSocket(); //Configuração do socket local //Mais detalhes consulte as manpages local.sin_family = AF_INET; local.sin_port = htons(31337); local.sin_addr.s_addr = INADDR_ANY; memset(local.sin_zero,0,8); //Associação da porta if(bind(localSocket, (struct sockaddr *)&local, sizeof(local)) == -1) errorBind(); //Inicio da escuta if(listen (localSocket, BACKLOG) == -1) errorListen(); structSize = sizeof(struct sockaddr_in); while(1){ //Agurda um processo conectars-se remoteSocket = accept(localSocket, (struct sockaddr *)&remote, &structSize); //Após a conxão ser aceita, o processo servidor é duplicado pid = fork(); if(pid == 0){ //Alocação de memória necessária bufferRcv = (char*) calloc (MAXALLOC, sizeof(char)); _bufferRcv = (char*) calloc (MAXALLOC, sizeof(char)); msgContent = (char*) calloc (MAXALLOC, sizeof(char)); fluxo = 0; while(!fluxo){ recv(remoteSocket, bufferRcv, MAXDATASIZE, 0); strcpy(_bufferRcv, bufferRcv); //Após a conexão de um cliente, a primeira mensagem que o servidor espera é do tipo USERNAME, //caso contrário o processo servidor é finalizado if(checkKindMessage(_bufferRcv,1) == USERNAME){ //Resgata o conteudo da mensagem strcpy(_bufferRcv, bufferRcv); msgContent = checkMessage(_bufferRcv); //Verifica se o userName é válido if(!checkUserName(msgContent)){ //Se o userName é válido o servidor guarda esse nome para o processo corrente identificar a qual usuário está associado strcpy(userName,msgContent); //Insere o usuário na lista de usuários ativos passando como parâmetros o seu nome e endereço insertUser(msgContent,inet_ntoa(remote.sin_addr)); //Informa ao cliente que ele foi conectado send(remoteSocket,generateMessage("",CONNECTED,1),MAXDATASIZE,0); fluxo = 1; }else{ //Sinaliza que o nome de usuário é inválido send(remoteSocket,generateMessage("",INVALIDUSERNAME,1),MAXDATASIZE,0); fluxo = 0; } }else{ close(remoteSocket); return 0; } } fluxo = 0; while(!fluxo){ //Recebe uma mensagem e guarda o estado de atividade do cliente int isActive = recv(remoteSocket, bufferRcv, MAXDATASIZE, 0); strcpy(_bufferRcv, bufferRcv); //Verifica o tipo da mensagem msgKind = checkKindMessage(_bufferRcv,1); strcpy(_bufferRcv, bufferRcv); msgContent = checkMessage(_bufferRcv); //Se o estado de conexão é ativo if(isActive){ //Trata as mensagem de acordo com o seu tipo switch(msgKind){ //ACTIVEUSERS: O servidor envia para o cliente a lista de usuários ativos case ACTIVEUSERS:{ int i = 0; _users = checkActiveUsers(); for(i=0;i<_users.size;i++){ send(remoteSocket,generateMessage(_users.name[i],USERNAME,1),MAXDATASIZE,0); } send(remoteSocket,generateMessage("",FINISHED,1),MAXDATASIZE,0); break; } //MESSAGECHAT: O servidor armazena a mensagem enviada pelo cliente case MESSAGECHAT:{ putMessageChatInLog(userName, msgContent); break; //UPDATECHAT: O servidor retorna as mensagens direcionadas ao cliente }case UPDATECHAT:{ int i = 0; _messages = checkLog(userName); for(i=0;i<_messages.size;i++){ send(remoteSocket,generateMessage(_messages.content[i],MESSAGECHAT,1),MAXDATASIZE,0); } send(remoteSocket,generateMessage("",FINISHED,1),MAXDATASIZE,0); break; //CLOSE: O servidor fecha a conexão }case CLOSE:{ removeUser(userName); deleteUserFiles(userName); close(remoteSocket); free(bufferRcv); free(_bufferRcv); free(msgContent); return 0; } } }else{ removeUser(userName); deleteUserFiles(userName); close(remoteSocket); break; } } free(bufferRcv); free(_bufferRcv); free(msgContent); break; } } return 0; }
int CanBus::multiWriteWaitReadMessage(VSCAN_MSG* msgs, int msg_count) { int status, retries=0; uint8_t rec_count = 0, count_readed = 0; DWORD written,read; VSCAN_MSG sended_msgs[msg_count] , readed_msgs[msg_count]; memcpy(sended_msgs, msgs, sizeof(VSCAN_MSG)*msg_count); QVector<VSCAN_MSG> cmds_tocheck; for(int x=0;x<msg_count;x++) cmds_tocheck.push_back(msgs[x] ); // printf("------------------------------------\n"); // printf("Initial messages:\n"); // for(mcount=0;mcount<msg_count;mcount++) // printMessageData(msgs[mcount]); status = VSCAN_Write(devHandler,msgs,msg_count,&written); VSCAN_Flush(devHandler); if(msgs[0].Id / 0x100 == 3) return 1; if(status != 0) { printf("writeWaitReadMessage() ERROR: El comando no se escribio correctamente\n"); return -1; } do{ if(VSCAN_Read(devHandler, readed_msgs, msg_count, &read) == 0 and read != 0) { for( int i=0;i< msg_count;i++) { QVector<VSCAN_MSG>::iterator it; for(int j = 0;j < cmds_tocheck.size();j++) //sended messages { if(checkMessage(&cmds_tocheck[j],&readed_msgs[i]) == 1) { memcpy(&msgs[i], &readed_msgs[i], sizeof(VSCAN_MSG)); cmds_tocheck.remove(j); break; } } } } usleep(20000); retries++; }while(cmds_tocheck.size() > 0 and retries < MAX_READ_RETRIES); if(retries >= MAX_READ_RETRIES) { printf("writeWaitReadMessage() ERROR: No se pudo leer la respuesta al comando enviado (retries = %d)\n", retries); while(cmds_tocheck.size() > 0) { printMessageData(cmds_tocheck.front()); cmds_tocheck.pop_front(); } return -1; } else { // qDebug()<<"good response"; return 1; } }
int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in own_addr, client_addr; // connector's address information struct hostent *he; int udpPort; struct timespec t2, t3; printf("Server starts \n"); if (argc != 2) { fprintf(stderr,"Usage: udpPort\n"); exit(1); } printf("server port reading\n"); //Port setzen udpPort = atoi(argv[1]); //atoi holt aus einem String eine Zahl printf("server port is readed\n"); printf("server create a socket\n"); //set a udp Server sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if(sockfd == -1) { fprintf(stderr, "Error creating socket DAS HIER????\n"); return 1; } printf("Server socked created\n"); //Resolv hostname to IP Address if ((he=gethostbyname("localhost")) == NULL) { // get the host info herror("gethostbyname"); printf("servername couldn't set"); exit(1); } printf("Servername localhost is set"); own_addr.sin_family = AF_INET; own_addr.sin_port = htons(udpPort); own_addr.sin_addr = *((struct in_addr *)he->h_addr); memset(own_addr.sin_zero, '\0', sizeof own_addr.sin_zero); //bind socket if(bind(sockfd, (const struct sockaddr*)&own_addr, sizeof(own_addr)) == -1) { fprintf(stderr, "Error creating socket\n"); return 1; } socklen_t client_addr_size; char buffer[20]; int n; while(1) { printf("server ist waiting for Request"); if((n=recvfrom(sockfd, buffer, sizeof(buffer), 0, (struct sockaddr*)&client_addr, &client_addr_size)) != 20) { fprintf(stderr, "Server :::Error receiving data. expected 20 bytes but got %d \n", n); return 1; } //Zweiter Zeitstempel clock_gettime(CLOCK_REALTIME, &t2); printf("Request received"); if(!checkMessage(buffer)) { fprintf(stderr, "bad message received"); return 1; } if(unpackData(buffer)==false){ printf("Error, unknown command"); } //Dritter Zeitstempel //don't print but send //define command packData(buffer, &t2); if((n=sendto(sockfd, buffer, 20, 0, (struct sockaddr*)&client_addr, client_addr_size)) != 20) { fprintf(stderr, "Error sending back data. expected 20 bytes but got %d \n", n); return 1; } clock_gettime(CLOCK_REALTIME, &t3); packData2(buffer, &t2,&t3); if((n=sendto(sockfd, buffer, 20, 0, (struct sockaddr*)&client_addr, client_addr_size)) != 20) { fprintf(stderr, "Error sending back data. expected 20 bytes but got %d \n", n); return 1; } } if( close(sockfd) == -1 ) { fprintf(stderr, "Error closing socket.\n"); } return 0; }
/// Message handling routines long MessageHandler::updateMessage(const Message &msg) { long messageid = -1; long translationid = -1; long params = -1; //msg.print(); if(msg.getString() == "" || msg.getClass() == "") { LOG4CXX_ERROR(narratorMsgHlrLog, "Not enough info to add message to database '" << msg.getString() << "'"); //msg.print(); return -1; } // Start a new transaction if(!db->prepare("BEGIN")) { LOG4CXX_ERROR(narratorMsgHlrLog, "Query failed '" << db->getLasterror() << "'"); } narrator::DBResult result; if(!db->perform(&result)) { LOG4CXX_ERROR(narratorMsgHlrLog, "%s: Query failed '" << db->getLasterror() << "'"); return false; } // Check if we already have this message in the database messageid = checkMessage(msg); if(messageid < 0) messageid = insertMessage(msg); // Check message translationx if(messageid > 0) { if(msg.hasTranslation()) translationid = checkMessageTranslation(messageid, msg.getTranslation()); else translationid = 0; } // Check message parameters if(messageid > 0) { params = checkMessageParameters(messageid, msg); } // If all went well commit changes if(messageid > 0 && translationid >= 0 && params >= 0) { if(!db->prepare("COMMIT")) { LOG4CXX_ERROR(narratorMsgHlrLog, "Query failed '" << db->getLasterror() << "'"); } narrator::DBResult result2; if(!db->perform(&result2)) { LOG4CXX_ERROR(narratorMsgHlrLog, "Query failed '" << db->getLasterror() << "'"); return -1; } } else { // If we had an error discard changes cout << "An error ocurred, rolling back changes" << endl; if(!db->prepare("COMMIT")) { LOG4CXX_ERROR(narratorMsgHlrLog, "Query failed '" << db->getLasterror() << "'"); } narrator::DBResult result3; if(!db->perform(&result3)) { LOG4CXX_ERROR(narratorMsgHlrLog, "Query failed '" << db->getLasterror() << "'"); return -1; } } return messageid; }