Vicon C

<< Back to the Vicon Toolkit page

Download Vicon Toolkit

Vicon RealTime Data: How to access/use the Vicon data stream.

As a prerequisite please see the Vicon Real Time tutorial.

The first step is to open a socket connection and send a request for EInfo

        int result = connect(	SocketHandle, (struct sockaddr*) & Endpoint, sizeof(Endpoint));
	if(result == SOCKET_ERROR)
	{
		std::cout << "Failed to create Socket" << std::endl;
		int e = WSAGetLastError();
		return 1;
	}//	A connection with the Vicon Realtime system is now open.

	try{    std::vector< std::string > info;
		const int bufferSize = 2040;
		char buff[bufferSize];
		char * pBuff;

		//- Get Info - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		//	Request the channel information
		pBuff = buff;
		* ((long int *) pBuff) = ClientCodes::EInfo;
		pBuff += sizeof(long int);
		* ((long int *) pBuff) = ClientCodes::ERequest;
		pBuff += sizeof(long int);		
		if(send(SocketHandle, buff, pBuff - buff, 0) == SOCKET_ERROR)
			throw std::string("Error Requesting");
	}

The next step is to obtain the real time data by recieving packets though the same socket.

                if(!recieve(SocketHandle, packet))
			throw std::string("Error Recieving");
		if(!recieve(SocketHandle, type))
			throw std::string("Error Recieving");	
		if(type != ClientCodes::EReply)
			throw std::string("Bad Packet");
		if(packet != ClientCodes::EInfo)
			throw std::string("Bad Reply Type");			
		long int size;
		if(!recieve(SocketHandle, size))
			throw std::string();
		info.resize(size);
		std::vector< std::string >::iterator iInfo;
		for(iInfo = info.begin(); iInfo != info.end(); iInfo++)	{
			long int s;
			char c[255];
			char * p = c;
			if(!recieve(SocketHandle, s)) 
				throw std::string();
			if(!recieve(SocketHandle, c, s)) 
				throw std::string();		
			p += s;			
			*p = 0;			
			*iInfo = std::string(c);
		}