#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Manta; using namespace SCIRun; using namespace std; UserInterface* NetworkUI::create(const vector& args, MantaInterface *rtrt_interface) { //UserInterface *newUI = new NetworkUI(args, rtrt_interface); //peturn newUI; return new NetworkUI(args, rtrt_interface); } NetworkUI::NetworkUI(const vector& args, MantaInterface *rtrt_interface) : rtrt_interface(rtrt_interface), server_socket_number ( -1 ), socket_number ( -1 ), port ( 30000) { string temp_port; // Parse command line args. for (int i=0;i> port; } } } memset ( &address, '\0', sizeof ( address ) ); server_socket_number = socket ( AF_INET, SOCK_STREAM, 0 ); int weight_for_socket=1; //1 means dont weight for socket to be free before binding if ( setsockopt(server_socket_number,SOL_SOCKET,SO_REUSEADDR,&weight_for_socket,sizeof(int)) == -1 ) if ( server_socket_number == -1 ) { cout<<"Error: Problem creating socket descriptor\n"; exit(1); } address.sin_family = AF_INET; address.sin_port = htons ( port ); address.sin_addr.s_addr = htons ( INADDR_ANY ); if ( bind ( server_socket_number, ( struct sockaddr * ) &address, sizeof ( address ) ) == -1 ) { cout<<"Error: Problem binding socket\n"; exit(1); } int number_of_connections = 1; if ( listen ( server_socket_number, number_of_connections ) == -1 ) { cout<<"Error: Problem occured while listening to socket\n"; exit(1); } cout<<"NetworkUI: Accepting socket connection\n"; int address_length = sizeof ( address ); socket_number = accept ( server_socket_number, ( sockaddr * ) &address, ( socklen_t * ) &address_length ); cout<<"NetworkUI: Socket Connected\n"; if (socket_number == -1 ) { cout<<"Error: Problem when accepting socket connection\n"; exit(1); } close(server_socket_number); } NetworkUI::~NetworkUI() { close(socket_number); } void NetworkUI::startup() { Thread* t = new Thread(this, "Manta User Interface"); t->setDaemon(true); t->detach(); } void NetworkUI::run() { int recv_check; unsigned char *buffer = new unsigned char[16]; for(;;) { recv_check = recv ( socket_number, buffer, 1, 0 ); //cout<0) cout<<"NetworkUI: Control signal received: "<getCurrentFrame()<addOneShotCallback(MantaInterface::Relative, 0, Callback::create(this, &NetworkUI::changeResolution, 0, xres, yres)); cout<<"NetworkUI: Resolution Updated "<<"x: "<getCamera(0); //cout<(camera); if(tempCamera==NULL) { cout<<"Error: MatrixCamera not detected"<setCameraNumber(tempNumber); cout<<"NetworkUI::run: camera number: "<getCameraNumber()<addTransaction("set Matrix", Callback::create(tempCamera, &MatrixCamera::setMatrix, invMat)); } }else if ( buffer[0]=='q' ) { rtrt_interface->finish(); } } delete [] buffer; } void NetworkUI::changeResolution(int, int, int channel, int new_xres, int new_yres) { // cerr << "Resolution: " << new_xres << " " << new_yres << endl; rtrt_interface->changeResolution(channel, new_xres, new_yres, true); }