Ejemplo n.º 1
0
	//================================================================================
	//!	メソッド名	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);
	}
Ejemplo n.º 2
0
	//================================================================================
	//!	メソッド名	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++;
			}
		}
	}
Ejemplo n.º 3
0
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 );
	}
}
Ejemplo n.º 4
0
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();
		}
	}
}
Ejemplo n.º 5
0
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);

}
Ejemplo n.º 6
0
	//================================================================================
	//!	メソッド名	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++;
			}
		}
	}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
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"));
    }
 }
Ejemplo n.º 10
0
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;
}
Ejemplo n.º 11
0
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));
}
Ejemplo n.º 12
0
/**************************************************
** 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;
}
Ejemplo n.º 13
0
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;
}
Ejemplo n.º 14
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();

}
Ejemplo n.º 15
0
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;
}
Ejemplo n.º 16
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;
	}
}
Ejemplo n.º 17
0
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;
}