void Ut_MAppletServer::testReconnect()
{
    setupServer();
    QCOMPARE(socket->state(), QLocalSocket::ConnectedState);
    QCOMPARE(m_subject->isConnected(), true);

    m_subject->closeConnection();
    QCOMPARE(m_subject->isConnected(), false);

    // Test that new connections can't be made
    delete socket;
    socket = new QLocalSocket;
    socket->connectToServer(QDir::homePath() + "/moopwidget_1");
    QCOMPARE(socket->waitForConnected(), false);
    QCOMPARE(socket->error(), QLocalSocket::ServerNotFoundError);
    QCOMPARE(m_subject->isConnected(), false);

    // Test that restarting the server works
    delete socket;
    connected = false;
    setupServer();
    QCOMPARE(connected, true);
    QCOMPARE(socket->state(), QLocalSocket::ConnectedState);
    QCOMPARE(m_subject->isConnected(), true);
}
void Ut_MAppletServer::testConnection()
{
    setupServer();

    // Verify whether connection has been established or not
    QCOMPARE(connected, true);
}
예제 #3
0
파일: main.c 프로젝트: yannakisg/gwebproxy
int main(int argc, char *argv[]) {
	int port;
	int c;
	char *strPort;
	
	if (argc != 3) {
		usage(argv[0]);
	}
	
	while ( (c = getopt(argc, argv, "p:")) != -1) {
		switch (c) {
			case 'p':
				strPort = optarg;
				break;
			case '?':
			default:
				usage(argv[0]);
		}
	}
	
	signal(SIGINT, sigintHandler);
	
	port = atoi(strPort);
	
	setupServer(port);
	
	runServer();
}
RKGraphicsDeviceFrontendTransmitter::RKGraphicsDeviceFrontendTransmitter () : QObject () {
	RK_TRACE (GRAPHICS_DEVICE);

	connection = 0;
	local_server = 0;

	setupServer ();
}
예제 #5
0
파일: ccs.cpp 프로젝트: nuigroup/ccw
//--------------------------------------------------------------
void ccs::setup(){
	svrGui = ofxGui::Instance(this);
	//ofxNxmlFile storedFile("config.nxml");
	setupServer();
	drawGUI();
	serverIsRunning = false;
	runServerRequest = srvAutoStart;
}
ClientDefinitions::ClientDefinitions( char * initKey ) : 
server( LOCAL_SERVER_PORT )	// initialization list
{
	char * oneTimeKey;
	memset( oneTimeKey, NULL, KEY_LENGTH + 1 );
	
	//char postData[ POST_DATA_LENGTH ];
	unsigned char authTryCount = 0;
  Serial.begin( 9600 );

	Serial.print( "Free ram: " );
	Serial.println( freeRam( ) );
	
	initEthernet( );
	server.begin( );
	setupServer( );
	setupClient( false, &authTryCount, initKey );
	//Serial.println( "Success." );
}
예제 #7
0
파일: main_window.cpp 프로젝트: gz818/itest
MainWindow::MainWindow()
{
    // User interface ----------------------------------------------------------
    if (tr("LTR") == "RTL") {
        qApp->setLayoutDirection(Qt::RightToLeft);
    }
    setupUi(this);
    network_access_manager = new QNetworkAccessManager(this);
    default_printer = NULL;
#ifdef Q_OS_MAC
    this->setUnifiedTitleAndToolBarOnMac(true);
#endif
    progressBar = new QProgressBar(this);
    progressBar->setTextVisible(false);
    progressBar->resize(QSize(30, 10));
    statusBar()->addPermanentWidget(progressBar, 0);
    statusBar()->setFixedHeight(20);
    progressBar->setFixedWidth(150);
    progressBar->setFixedHeight(15);
    progressBar->setVisible(false);
    LQCategoryComboBox->setVisible(false);
    SQStatisticsLabel->setVisible(false);
    currentSvgChanged();
    btnApply = SQButtonBox->button(QDialogButtonBox::Apply);
    btnApply->setText(tr("Apply"));
    btnApply->setStatusTip(tr("Apply any changes you have made to the question"));
    btnApply->setIcon(QIcon(QString::fromUtf8(":/images/images/button_ok.png")));
    btnDiscard = SQButtonBox->button(QDialogButtonBox::Discard);
    btnDiscard->setText(tr("Discard"));
    btnDiscard->setStatusTip(tr("Discard any changes you have made to the question"));
    btnDiscard->setIcon(QIcon(QString::fromUtf8(":/images/images/button_cancel.png")));
    SQQuestionTextEdit->setTitle(tr("Question:"));
    SQQuestionTextEdit->textEdit()->setStatusTip(tr("Text of the selected question"));
    ECTextEdit->setTitle(tr("Comments:"));
    ECTextEdit->textEdit()->setStatusTip(tr("Use this field for your comments, notes, reminders..."));
    EFTreeWidget->setMouseTracking(true);
    EFTreeWidget->header()->setSectionResizeMode(0, QHeaderView::Fixed);
    EFTreeWidget->header()->setSectionResizeMode(1, QHeaderView::Stretch);
    EFTreeWidget->header()->setSectionResizeMode(2, QHeaderView::ResizeToContents);
    EFButtonBox->button(QDialogButtonBox::Apply)->setText(tr("Apply"));
    EFButtonBox->button(QDialogButtonBox::Apply)->setStatusTip(tr("Apply any changes you have made to the categories"));
    EFButtonBox->button(QDialogButtonBox::Apply)->setIcon(QIcon(QString::fromUtf8(":/images/images/button_ok.png")));
    EFButtonBox->button(QDialogButtonBox::Discard)->setText(tr("Discard"));
    EFButtonBox->button(QDialogButtonBox::Discard)->setStatusTip(tr("Discard any changes you have made to the categories"));
    EFButtonBox->button(QDialogButtonBox::Discard)->setIcon(QIcon(QString::fromUtf8(":/images/images/button_cancel.png")));
    // Initialize variables ----------------------------------------------------
    // URLs
    docs_url = tr("http://itest.sourceforge.net/documentation/%1/en/").arg("1.4");
    // i18n
    QTranslator translator; translator.load(":/i18n/iTest-i18n.qm");
    itest_i18n.insert("English", "en");
    itest_i18n.insert(translator.translate("LanguageNames", "Slovak"), "sk");
    itest_i18n.insert(translator.translate("LanguageNames", "Russian"), "ru");
    itest_i18n.insert(translator.translate("LanguageNames", "Turkish"), "tr");
    itest_i18n.insert(translator.translate("LanguageNames", "Portuguese"), "pt");
    itest_i18n.insert(translator.translate("LanguageNames", "Spanish"), "es");
    itest_i18n.insert(translator.translate("LanguageNames", "Italian"), "it");
    itest_i18n.insert(translator.translate("LanguageNames", "Latvian"), "lv");
    itest_i18n.insert(translator.translate("LanguageNames", "Ukrainian"), "uk");
    itest_i18n.insert(translator.translate("LanguageNames", "Czech"), "cs");
    itest_i18n.insert(translator.translate("LanguageNames", "Hungarian"), "hu");
    itest_i18n.insert(translator.translate("LanguageNames", "German"), "de");
    // CURRENT_DB
    current_db_open = false;
    current_db_session = NULL;
    current_db_class = NULL;
    current_db_categories.resize(20);
    current_db_categories_enabled.resize(20);
    // Connect slots -----------------------------------------------------------
    tbtnAddQuestion->setDefaultAction(actionAdd);
    tbtnDuplicateQuestion->setDefaultAction(actionDuplicate);
    tbtnDeleteQuestion->setDefaultAction(actionDelete);
    QObject::connect(actionAdd, SIGNAL(triggered()), this, SLOT(addQuestion()));
    QObject::connect(actionDelete, SIGNAL(triggered()), this, SLOT(deleteQuestion()));
    QObject::connect(actionDuplicate, SIGNAL(triggered()), this, SLOT(duplicateQuestion()));
    QObject::connect(btnApply, SIGNAL(released()), this, SLOT(applyQuestionChanges()));
    QObject::connect(actionApply, SIGNAL(triggered()), this, SLOT(applyQuestionChanges()));
    QObject::connect(btnDiscard, SIGNAL(released()), this, SLOT(discardQuestionChanges()));
    QObject::connect(actionDiscard, SIGNAL(triggered()), this, SLOT(discardQuestionChanges()));

    QObject::connect(actionNew, SIGNAL(triggered()), this, SLOT(newDB()));
    QObject::connect(btnNew, SIGNAL(released()), this, SLOT(newDB()));
    QObject::connect(actionOpen, SIGNAL(triggered()), this, SLOT(open()));
    QObject::connect(btnOpenOther, SIGNAL(released()), this, SLOT(open()));
    QObject::connect(btnOpenSelected, SIGNAL(released()), this, SLOT(openRecent()));
    QObject::connect(actionSave, SIGNAL(triggered()), this, SLOT(save()));
    QObject::connect(actionSave_as, SIGNAL(triggered()), this, SLOT(saveAs()));
    QObject::connect(actionSave_a_copy, SIGNAL(triggered()), this, SLOT(saveCopy()));
    QObject::connect(actionExport_CSV, SIGNAL(triggered()), this, SLOT(exportCSV()));
    QObject::connect(actionClose, SIGNAL(triggered()), this, SLOT(closeDB()));
    QObject::connect(actionQuit, SIGNAL(triggered()), this, SLOT(quit()));
    QObject::connect(actionAbout, SIGNAL(triggered()), this, SLOT(about()));

    QObject::connect(recentDBsListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(openRecent(QListWidgetItem *)));
    QObject::connect(LQListWidget, SIGNAL(currentTextChanged(QString)), this, SLOT(setCurrentQuestion()));

    QObject::connect(actionFrom_A_to_Z, SIGNAL(triggered()), this, SLOT(sortQuestionsAscending()));
    QObject::connect(actionFrom_Z_to_A, SIGNAL(triggered()), this, SLOT(sortQuestionsDescending()));
    QObject::connect(actionBy_category, SIGNAL(triggered()), this, SLOT(sortQuestionsByCategory()));

    tbtnAddSVG->setDefaultAction(actionAdd_SVG);
    tbtnRemoveSVG->setDefaultAction(actionRemove_SVG);
    tbtnEditSVG->setDefaultAction(actionEdit_SVG);
    tbtnExportSVG->setDefaultAction(actionExport_SVG);
    QObject::connect(actionAdd_SVG, SIGNAL(triggered()), this, SLOT(addSvg()));
    QObject::connect(actionRemove_SVG, SIGNAL(triggered()), this, SLOT(removeSvg()));
    QObject::connect(actionEdit_SVG, SIGNAL(triggered()), this, SLOT(editSvg()));
    QObject::connect(actionExport_SVG, SIGNAL(triggered()), this, SLOT(exportSvg()));
    QObject::connect(SQSVGListWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(previewSvg(QListWidgetItem *)));
    QObject::connect(SQSVGListWidget, SIGNAL(currentTextChanged(QString)), this, SLOT(currentSvgChanged()));

    tbtnMoveUp->setDefaultAction(actionMove_up);
    tbtnMoveDown->setDefaultAction(actionMove_down);
    QObject::connect(actionMove_up, SIGNAL(triggered()), this, SLOT(moveUp()));
    QObject::connect(actionMove_down, SIGNAL(triggered()), this, SLOT(moveDown()));
    QObject::connect(actionMove_to_top, SIGNAL(triggered()), this, SLOT(moveToTop()));
    QObject::connect(actionMove_to_bottom, SIGNAL(triggered()), this, SLOT(moveToBottom()));
    QObject::connect(actionHide, SIGNAL(triggered()), this, SLOT(hideQuestion()));
    QObject::connect(actionShow_hidden, SIGNAL(triggered()), this, SLOT(filterLQSearch()));

    rbtngrpFilterLQ = new QButtonGroup(this);
    rbtngrpFilterLQ->addButton(LQAllRadioButton);
    rbtngrpFilterLQ->addButton(LQEasyRadioButton);
    rbtngrpFilterLQ->addButton(LQMediumRadioButton);
    rbtngrpFilterLQ->addButton(LQDifficultRadioButton);
    rbtngrpFilterLQ->addButton(LQCategoryRadioButton);

    actgrpFilterLQ = new QActionGroup(this);
    actgrpFilterLQ->addAction(actionShow_all);
    actgrpFilterLQ->addAction(actionShow_easy);
    actgrpFilterLQ->addAction(actionShow_medium);
    actgrpFilterLQ->addAction(actionShow_difficult);
    actgrpFilterLQ->addAction(actionShow_category);

    QObject::connect(rbtngrpFilterLQ, SIGNAL(buttonReleased(QAbstractButton *)), this, SLOT(filterLQ(QAbstractButton *)));
    QObject::connect(actgrpFilterLQ, SIGNAL(triggered(QAction *)), this, SLOT(filterLQAction(QAction *)));
    QObject::connect(LQCategoryComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterLQCategoryChanged()));
    QObject::connect(LQSearchLineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(filterLQSearch()));
    QObject::connect(tbtnSearchByGroup, SIGNAL(released()), this, SLOT(searchByGroup()));

    actgrpPage = new QActionGroup(this);
    actgrpPage->addAction(actionEdit_questions);
    actgrpPage->addAction(actionEdit_comments);
    actgrpPage->addAction(actionEdit_categories);
    actgrpPage->addAction(actionEdit_test);
    actgrpPage->addAction(actionSaved_sessions);
    actgrpPage->addAction(actionEdit_classes);

    QObject::connect(actgrpPage, SIGNAL(triggered(QAction *)), this, SLOT(setPage(QAction *)));

    //QObject::connect(btnApply, SIGNAL(released()), this, SLOT(setDatabaseModified()));
    //QObject::connect(actionApply, SIGNAL(triggered()), this, SLOT(setDatabaseModified()));
    QObject::connect(ECTextEdit, SIGNAL(textChanged()), this, SLOT(setDatabaseModified()));

    QObject::connect(actionCheck_for_updates, SIGNAL(triggered()), this, SLOT(checkForUpdates()));
    QObject::connect(network_access_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(httpRequestFinished(QNetworkReply *)));
    QObject::connect(actionDocumentation, SIGNAL(triggered()), this, SLOT(openDocumentation()));
    QObject::connect(SQStatisticsLabel, SIGNAL(linkActivated(QString)), this, SLOT(adjustQuestionDifficulty()));
    QObject::connect(actionPrint_questions, SIGNAL(triggered()), this, SLOT(showPrintQuestionsDialogue()));
    QObject::connect(actionOverall_statistics, SIGNAL(triggered()), this, SLOT(overallStatistics()));
    QObject::connect(actionChange_language, SIGNAL(triggered()), this, SLOT(changeLanguage()));

    QObject::connect(mainStackedWidget, SIGNAL(currentChanged(int)), this, SLOT(currentPageChanged(int)));
    // Disable all -------------------------------------------------------------
    setAllEnabled(false);
    // Categories -------------------------------------------------------------------
    setupCategoriesPage();
    // Server ------------------------------------------------------------------
    setupServer();
    // Session viewer ----------------------------------------------------------
    setupSessionViewer();
    // Class viewer ------------------------------------------------------------
    setupClassViewer();
    // -------------------------------------------------------------------------
#ifdef Q_OS_MAC
    show();
#endif
    // Load settings -----------------------------------------------------------
    loadSettings();
    // Ready -------------------------------------------------------------------
    statusBar()->showMessage(tr("Ready"), 10000);
    // Check app args ----------------------------------------------------------
    if (qApp->arguments().count() > 1) {
        openFile(qApp->arguments().at(1));
    }
    // -------------------------------------------------------------------------
#ifndef Q_OS_MAC
    show();
#endif
}
예제 #8
0
파일: chord.c 프로젝트: willzxd/Chord
/*================MAIN==================*/
int main(int argc, char** argv){
	if(argc != 2 && argc != 4){
		printf("usage: %s [Port]\n", argv[1]);
		printf("usage: %s [my port] [server ipaddress] [server port]\n", argv[1]);
		exit(1);
	}

	//init current node, 2 predecessors, 2 successor0cessors
	current = mmap(NULL, sizeof(current), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	current->id = 0;
	current->port = 0;
	strcpy(current->ip, "\0");

	predecessor0 = mmap(NULL, sizeof(predecessor0), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	predecessor0->id = 0;
	predecessor0->port = 0;
	strcpy(predecessor0->ip, "\0");

	predecessor1 = mmap(NULL, sizeof(predecessor1), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	predecessor1->id = 0;
	predecessor1->port = 0;
	strcpy(predecessor1->ip, "\0");

	successor0 = mmap(NULL, sizeof(successor0), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	successor0->id = 0;
	successor0->port = 0;
	strcpy(successor0->ip, "\0");

	successor1 = mmap(NULL, sizeof(successor1), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	successor1->id = 0;
	successor1->port = 0;
	strcpy(successor1->ip, "\0");

	fingerTable = mmap(NULL, sizeof(FINGERTABLE_SIZE * sizeof(finger)), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);

	quitUpdate = mmap(NULL, sizeof(quitUpdate),PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
	*quitUpdate = 0;

	//
	CurrentInfo(argv[1]);

	if(argc == 2){
		printf("Only two arguments.Create a new ring.\n");
		createRing(argv[1]);
	} 
	else{
		printf("Only four arguments. Join a old ring.\n");
		join(argv);
	}

	int pid0 = fork();

	if (pid0 == 0){
		//printf("Need a function send "IS_ALIVE" here");
	} 
	else{
		if (pid0 == -1){
			perror("fork");
			return 1;
		} 
		else{
			
			int pid = fork();
			if (pid == 0){
				//printf("===MAIN: I will fork and set up server.===\n");
				setupServer(argv[1]);
				return 0;
			} 
			else{
				if (pid == -1){
					perror("fork");
					return 1;
				} 
				else{
					//printf("I will deal with ui.\n");
					ui();
					return 0;
				}
			}

			return 0;
		}
	}

}
예제 #9
0
static int realMain(MprCmdLine *cmdLine)
{
	MaHttp		*http;
	char        portNumBuf[MPR_MAX_IP_PORT];
	char		*argp, *logSpec;
	int			c, errflg, kill, poolThreads, outputVersion;

	mprSetMemHandler(memoryFailure);
	mprCreateMemHeap(0, 16 * 1024, MAXINT);
	program = mprGetBaseName(cmdLine->getArgv()[0]);

	poolThreads = -1;
	kill = errflg = 0;
	logSpec = 0;
	outputVersion = 0;
	autoScan = 1;
	background = 0;

	serverRoot = 0;
	docRoot = "web";

#if !WIN && !WINCE && !VXWORKS
	if (getuid()) {
		ipAddr = mprStrdup("4000");

	} else {
		mprSprintf(portNumBuf, sizeof(portNumBuf), "%d", 
			MA_SERVER_DEFAULT_PORT_NUM);
		ipAddr = mprStrdup(portNumBuf);
	}
#else
	mprSprintf(portNumBuf, sizeof(portNumBuf), "%d", 
		MA_SERVER_DEFAULT_PORT_NUM);
	    
	ipAddr = mprStrdup(portNumBuf);
#endif

	while ((c = cmdLine->next(&argp)) != EOF) {
		switch(c) {
		case 'A':
			autoScan = 0;
			break;

		case 'a':
			mprFree(ipAddr);
			ipAddr = mprStrdup(argp);
			break;
			
		case 'b':
			background++;
			break;

		case 'c':
			/* Ignored */
			break;

		case 'D':
			mprSetDebugMode(1);
			break;

		case 'd':
			docRoot = argp;
			break;

		case 'f':
#if BLD_FEATURE_CONFIG_PARSE
			configFile = argp;
			autoScan = 0;
#else
			errflg++;
#endif
			break;

		case 'k':
			kill++;
			logSpec = 0;
			break;

		case 'l':
			logSpec = (*argp) ? argp : 0;
			break;

		case 'm':
			mprRequestMemStats(1);
			break;

		case 'r':
			serverRoot = argp;
			break;
		
		case 't':
			poolThreads = atoi(argp);
			break;

			//
			//	FUTURE -- just for test. Will be removed
			//
		case 'w':
			writeFile = argp;
			break;

		case 'v':
			outputVersion++;
			break;
		
#if WIN && BLD_FEATURE_RUN_AS_SERVICE
		case 'i':
			serviceOp = MPR_INSTALL_SERVICE;
			if (strcmp(argp, "none") == 0) {
				serviceCmdLine = "";
			} else if (strcmp(argp, "default") == 0) {
				serviceCmdLine = "-b -c -f " BLD_PRODUCT ".conf";
			} else {
				serviceCmdLine = argp;
			}
			break;

		case 'g':
			serviceOp = MPR_GO_SERVICE;
			break;

		case 's':
			serviceOp = MPR_STOP_SERVICE;
			break;

		case 'u':
			serviceOp = MPR_UNINSTALL_SERVICE;
			break;

#endif
		default:
			errflg++;
			break;
		}
	}

	if (errflg) {
		printUsage(program);
		return MPR_ERR_BAD_SYNTAX;
	}	

	mp = new Mpr(program);
	mp->setAppName(BLD_PRODUCT);
	mp->setAppTitle(BLD_NAME);
	mp->setHeadless(isService || background);

#if BLD_HOST_UNIX || VXWORKS
	initSignals();
#endif

	if (kill) {
		mp->killMpr();
		delete mp;
		exit(0);
	}

	if (outputVersion) {
		printVersion();
		delete mp;
		exit(0);
	}

	//
	//	Create the top level HTTP service and default HTTP server
	//
	http = new MaHttp();
	server = new MaServer(http, "default");
	setupFileSystem();
	
	setLogging(logSpec);

	//
	//	Confirm the location of the server root
	//
	if (locateServerRoot(serverRoot) < 0) {
		mprError(MPR_L, MPR_USER, "Can't start server, exiting.");
		exit(2);
	}

	if (securityChecks(cmdLine->getArgv()[0]) < 0) {
		exit(3);
	}

#if WIN
#if BLD_FEATURE_RUN_AS_SERVICE
	if (serviceOp) {
		windowsServiceOps();
		delete mp;
		return 0;
	}
#endif
	if (windowsInit() < 0) {
		delete mp;
		return MPR_ERR_CANT_INITIALIZE;
	}
#endif

	//
	//	Start the MPR. This starts Timer, Socket and Pool services
	//
	if (mp->start(MPR_KILLABLE) < 0) {
		mprError(MPR_L, MPR_USER, "Can't start MPR for %s", mp->getAppTitle());
		delete mp;
		return MPR_ERR_CANT_INITIALIZE;
	}

	//
	//	Load the statically linked modules
	//
	maLoadStaticModules();

	if (setupServer(http, poolThreads) < 0) {
		mprError(MPR_L, MPR_USER, "Can't configure the server, exiting.");
		exit(6);
	}

#if BLD_FEATURE_CONFIG_SAVE
	if (writeFile) {
		server->saveConfig(writeFile);
		mprLog(0, "Configuration saved to %s\nExiting ...\n", writeFile);
		exit(0);
	}
#endif

	if (http->start() < 0) {
		mprError(MPR_L, MPR_USER, "Can't start server, exiting.");
		exit(7); 

	} else {
#if LINUX && BLD_FEATURE_RUN_AS_SERVICE
		if (background && mp->makeDaemon(1) < 0) {
			mprError(MPR_L, MPR_USER, "Could not run in the background");
		} else 
#endif
		{
#if BLD_FEATURE_MULTITHREAD
			mprLog(MPR_CONFIG, 
				"HTTP services are ready with %d pool threads\n",
				http->getLimits()->maxThreads);
#else
			mprLog(MPR_CONFIG, 
				"HTTP services are ready (single-threaded).\n");
#endif
		}
		mp->setHeadless(1);

		eventLoop();

		mprLog(MPR_WARN, "Stopping HTTP services.\n");
		http->stop();
	}

#if WIN
	if (trayIcon > 0) {
		closeTrayIcon();
	}
	if (trayTimer) {
		trayTimer->stop(MPR_TIMEOUT_STOP);
		trayTimer->dispose();
		trayTimer = 0;
	}
#endif

	mprLog(MPR_WARN, "Stopping MPR services.\n");
	mp->stop(0);
	maUnloadStaticModules();
	delete server;
	delete http;
	delete mp;

	mprFree(ipAddr);

#if BLD_FEATURE_ROMFS
	delete romFileSystem;
#endif

#if BLD_FEATURE_LOG
	mprLog(MPR_WARN, "Closing log.\n");
	if (logger) {
		delete logger;
	}
#if WIN
	if (dialog) {
		delete dialog;
	}
#endif
#endif
	return 0;
}
예제 #10
0
int main ( int argc, char *argv[])
{
   int             sock;
   int             port;
   int             conn[MAX_CONNS];
   int             dev;
   int 		   screenWidth, screenHeight;
   fd_set	   fdset;
   int             res;
   int             i;

   if (argc < 2)
   {
      fprintf (stderr, "use: %s <port> -v\n", argv[0]);
      return 1;
   }

   port = atoi (argv[1]);

   if (argc > 2 && strncmp(argv[2],"-v",2) == 0)
     verbose = 1;

   getScreenSize(&screenWidth, &screenHeight);
   if (verbose) printf("screen size is %d X %d \n", screenWidth, screenHeight);
   g_screenWidth = screenWidth;
   g_screenHeight = screenHeight;

   if ((dev = openTouchDevice(device,screenWidth,screenHeight)) < 0)
      return 1;
   if (verbose) printf("openned the device %s\n",device);

   if ((sock = setupServer (port)) < 0)
      return 1;
   if (verbose) printf("server ready. socket is %d\n",sock);


   // reset all connections to not used.
   for (i = 0; i < MAX_CONNS; i++)
   {
   	conn[i] = -1;
   }

   while (1)
   {
      if (verbose) printf("waiting for an event\n");
      do {
         int setsize = sock;
         FD_ZERO(&fdset);
         FD_SET(sock,&fdset);
         for (i = 0; i < MAX_CONNS; i++)
	 {
	    if (conn[i] >= 0)
	    {
	       if (setsize < conn[i]) setsize = conn[i];
               FD_SET(conn[i], &fdset);
	    }
	 }
	 res = select(setsize+1, &fdset, NULL,NULL,NULL);
      } while (res == -1 && errno == EINTR);

      if (verbose) printf("processing events\n");
      if (res > 0)
      {
         if (FD_ISSET(sock, &fdset))
	 {
            for (i = 0; i < MAX_CONNS; i++)
	    {
	       if (conn[i] < 0)
	       {
	      	  conn[i] = accept(sock, NULL, NULL);
                  if (verbose) printf("accepting a new connection (%d:%d)\n", i,conn[i]);
		  break;
	       }
	    }
	    if (i == MAX_CONNS)
	       fprintf(stderr,"Max cons reached\n");
	 }
	 else
	 {
	    for (i = 0; i < MAX_CONNS; i++)
	    {
	       if (conn[i] >= 0 && FD_ISSET(conn[i], &fdset))
	       {
                  if (verbose) printf("got a command on socket %d\n", conn[i]);
	          if ( processCommand(conn[i],dev) == 0)
		  {
                     shutdown (conn[i], SHUT_RDWR);
		     close(conn[i]);
		     conn[i] = -1;
		  }
	       }
	    }
	 }
      }
   }
   close (sock);
   return 0;
}
예제 #11
0
int main() {
  const int server = setupServer();

  if(server == -1) {
    printf("Could not set up server\n");
    exit(1);
  }

  printf("Listening for connections\n");

  sockaddr_storage their_addr;
  socklen_t sin_size = sizeof their_addr;

  fd_set master;    // master file descriptor list
  fd_set read_fds;  // temp file descriptor list for select()

  FD_ZERO(&master);    // clear the master and temp sets
  FD_ZERO(&read_fds);

  // add the server to the master set
  FD_SET(server, &master);

  // keep track of the biggest file descriptor
  int fdmax = server; // so far, it's this one

  int newfd; // newly accept()ed socket descriptor
  struct sockaddr_storage remoteaddr; // client address
  socklen_t addrlen;

  char buf[MAXDATASIZE]; // buffer for client data
  int nbytes;

  std::unordered_map<int, std::string> users;

  while(true) {
    read_fds = master; // copy it
    if (select(fdmax+1, &read_fds, NULL, NULL, NULL) == -1) {
        perror("Select() failed");
        exit(4);
    }

    // run through the existing connections looking for data to read
    for(int i = 0; i <= fdmax; i++) {
      if (FD_ISSET(i, &read_fds)) { // we got one!!
        if (i == server) {
          // handle new connections
          addrlen = sizeof remoteaddr;
          newfd = accept(server, (struct sockaddr *)&remoteaddr, &addrlen);

          if (newfd == -1) {
            perror("Accept() failed");
          } else {
            FD_SET(newfd, &master); // add to master set
            if (newfd > fdmax) {    // keep track of the max
              fdmax = newfd;
            }

            int numbytes = recv(newfd, buf, sizeof buf, 0); // get the username
            buf[numbytes] = '\0';

            users[newfd] = buf; // add the username in the unordered_map

            printf("%s connected.\n", users[newfd].c_str());
          }
        } else {
          // handle data from a client
          if ((nbytes = recv(i, buf, sizeof buf, 0)) <= 0) {
            // got error or connection closed by client
            if (nbytes == 0) {
                // connection closed
                printf("%s disconnected.\n", users[i].c_str());
            } else {
                perror("Recv() failed");
            }
            users.erase(i); // remove from unordered_map
            close(i); // bye!
            FD_CLR(i, &master); // remove from master set
          } else {
            // we got some data from a client
            buf[nbytes] = '\0';
            printf("%s: %s", users[i].c_str(), buf);
            for(int j = 0; j <= fdmax; j++)
              // send to everyone!
              if (FD_ISSET(j, &master))
                // except the server and ourselves
                if (j != server && j != i)
                  if (send(j, buf, nbytes, 0) == -1)
                    perror("Send() failed");
          }
        } // END handle data from client
      } // END got new incoming connection
    } // END looping through file descriptors
  }

  return 0;
}
예제 #12
0
파일: ccs.cpp 프로젝트: nuigroup/ccw
//--------------------------------------------------------------
// This is a bit messy for now, quick UI implementation
//--------------------------------------------------------------
void ccs::handleGui(int parameterId, int task, void* data, int length)
{
	bool serverWasRunning = serverIsRunning;
	switch(parameterId)
	{
		case ccsStartStop:
			if(task == kofxGui_Set_Bool)
			{
				if(*(bool*)data) {
					if (serverIsRunning) {
						runServerRequest = false;
						ofSetWindowTitle("CCS [Stopping]");
					}
					else {
						runServerRequest = true;
					}
				}
			}
		break;
		case ccsReset:
			runServerRequest = false;
			setupServer();
			btnReset->setValue(false);
			runServerRequest = true;
		break;
		case ccsPort80:
			runServerRequest = false;
			srvPort = 80;
			btnPort80->setValue(true);
			btnPort888->setValue(false);
			btnPort8080->setValue(false);
			sldrPort->setValue(80);
			if (serverWasRunning)
				runServerRequest = true;
		break;
		case ccsPort888:
			runServerRequest = false;
			srvPort = 888;
			btnPort80->setValue(false);
			btnPort888->setValue(true);
			btnPort8080->setValue(false);
			sldrPort->setValue(888);
			if (serverWasRunning)
				runServerRequest = true;
		break;
		case ccsPort8080:
			runServerRequest = false;
			srvPort = 8080;
			btnPort80->setValue(false);
			btnPort888->setValue(false);
			btnPort8080->setValue(true);
			sldrPort->setValue(8080);
			if (serverWasRunning)
				runServerRequest = true;
		break;
		case ccsAutoRun:
			if (srvAutoStart == true) {
				srvAutoStart = false;
				btnAutoRun->setValue(false);
				setupFile.setValue("autorun", "false", 0);
			}
			else {
				srvAutoStart = true;
				btnAutoRun->setValue(true);
				setupFile.setValue("autorun", "true", 0);
			}
			setupFile.saveFile("config/ccs-config.xml");
		break;
		case ccsLog:
			runServerRequest = false;
			if (srvLogging == true) {
				srvLogging = false;
				btnLog->setValue(false);
				setupFile.setValue("logging", "false", 0);
			}
			else {
				srvLogging = true;
				btnLog->setValue(true);
				setupFile.setValue("logging", "true", 0);
			}
			if (serverWasRunning)
				runServerRequest = true;
			
			setupFile.saveFile("config/ccs-config.xml");
		break;
		case ccsDirList:
			runServerRequest = false;
			if (srvDirList == true) {
				srvDirList = false;
				btnDirList->setValue(false);
				setupFile.setValue("dirlist", "false", 0);
			}
			else {
				srvDirList = true;
				btnDirList->setValue(true);
				setupFile.setValue("dirlist", "true", 0);
			}
			if (serverWasRunning)
				runServerRequest = true;
			setupFile.saveFile("config/ccs-config.xml");
		break;
		case ccsPort:
			runServerRequest = false;
			srvPort = sldrPort->mValue;
			if (serverWasRunning)
				runServerRequest = true;
			//setupFile.setValue("port", ofToString(srvPort), 0);
			setupFile.saveFile("config/ccs-config.xml");
		break;
	}
}