void MainWindow::hostServer()
{
  TcpServerWidget *serverWidget = new TcpServerWidget();
  serverWidget->setVisible(true);
  ui->connection_widget->layout()->addWidget(serverWidget);
  ui->stackedWidget->setCurrentIndex(1);

  //serverWidget->startServer(ui->host_ip_lineEdit->text(),ui->port_lineEdit->text().toUInt());
  serverWidget->startServer(ui->port_lineEdit->text().toUInt());

  joinServer();
}
MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);

  connect(ui->host_pushButton,SIGNAL(clicked()),this,SLOT(hostServer()));
  connect(ui->join_pushButton,SIGNAL(clicked()),this,SLOT(joinServer()));

  ui->splitter->setStretchFactor(0, 100);
  ui->splitter->setStretchFactor(1, 1);

  ui->stackedWidget->setCurrentIndex(0);
}
Example #3
0
// El cliente encuentra servidores
void NetworkEngine::lanServerFound(RakNet::Packet * packet)
{
	RakNet::TimeMS time;
	RakNet::BitStream bsIn(packet->data,packet->length,false);

	bsIn.IgnoreBytes(1);
	bsIn.Read(time);
	bool serverIsInLobby = bsIn.ReadBit();

	if(serverIsInLobby) //Solo muestra los que no han empezado
	{
		unsigned char numPlayers;
		bsIn.Read(numPlayers);
		
		ServerInfo server;			
		server.ip = packet->systemAddress.ToString(false);
		server.ping = RakNet::GetTimeMS() - time ;
		server.players = numPlayers;
		server.isLan = true;
		if(numPlayers < 0 || numPlayers > MAX_PLAYERS) //Se ignoran los servers rotos
		{
			return; 
		}
		//add server en browser
		if(serverBrowser.addServer(server))
		{
			GameManager::getInstance()->getGraphicsEngine()->addServerToBrowserTable(server);
		}
		
		// Es un cliente que ha arrancado un servidor y esta esperando
		if (!GameManager::getInstance()->isServer() && waitingForServer)
		{
			// Se autoconecta a este ultimo
			waitingForServer = false;
			joinServer( serverBrowser.getServerInfoList().size() - 1 );
		}
	}
}
Example #4
0
int main(int argc, char **argv) {
	if (argc < 3) {
		fprintf(stderr, "Usage: %s: <ip> <port>\n", argv[0]);
		exit(1);
	}

	initscr();
	nonl();
	cbreak();
	noecho();
	keypad(stdscr, TRUE);

	if (has_colors()) {
		start_color();

		init_pair(1, COLOR_RED, COLOR_BLACK);
		init_pair(2, COLOR_GREEN, COLOR_BLACK);
		init_pair(3, COLOR_YELLOW, COLOR_BLACK);
		init_pair(4, COLOR_BLUE, COLOR_BLACK);
		init_pair(5, COLOR_CYAN, COLOR_BLACK);
		init_pair(6, COLOR_MAGENTA, COLOR_BLACK);
		init_pair(7, COLOR_WHITE, COLOR_BLACK);
	}

	int h, w;
	getmaxyx(stdscr, h, w);

	dispW = newwin(h - 2, w, 0, 0);
	inputW = newwin(2, w, h - 2, 0);

	nodelay(inputW, TRUE);
	scrollok(dispW, TRUE);

	sock = joinServer(argv[1], atoi(argv[2]));

	signal(SIGINT, cleanup);
	signal(SIGSEGV, cleanup);

	mvwaddch(inputW, 0, 0, ACS_ULCORNER);
	for (int i = 1; i < w; i++) {
		mvwaddch(inputW, 0, i, ACS_HLINE);
	}
	mvwaddch(inputW, 1, 0, ACS_VLINE);
	wrefresh(inputW);
	int pos = 0;
	char command[256];
	memset(command, 0, 256);

	events = mqueue_create();
	dispEvents = mqueue_create();

	// Create event thread
	pthread_t networkThreadID;
	thread_args *args = malloc(sizeof(thread_args));
	if (args == NULL) {
		fprintf(stderr, "Error allocating memory\n");
		exit(1);
	}
	args->sock = sock;
	args->events = events;
	args->dispEvents = dispEvents;
	if (pthread_create(&networkThreadID, NULL, networkThread, (void *)args)) {
		fprintf(stderr, "Error creating thread\n");
		exit(1);
	}

	pthread_t eventThreadID;
	if (pthread_create(&eventThreadID, NULL, eventThread, (void *)args)) {
		fprintf(stderr, "Error creating thread\n");
		exit(1);
	}
	free(args);

	sendMessage(sock, "SYN");

	while (1) {
		//char c = mvwgetch(inputW, 1, pos + 1);
		char c = wgetch(inputW);

		if (c == ERR) { // Run through display events
			while (!mqueue_is_empty(dispEvents)) {
				char *e = mqueue_dequeue(dispEvents);
				logMessage(e, CLIENT);
				free(e);
			}
		} else {
			// Check enter
			if (c == 13) {
				for (int i = 1; i <= pos; i++) {
					mvwaddch(inputW, 1, i, ' ');
				}

				command[pos] = 0;
				pos = 0;
				wmove(inputW, 1, 1);

				if (strlen(command) > 0) {
					msg_command *mc = malloc(sizeof(msg_command));
					if (mc == NULL) {
						fprintf(stderr, "Error allocating memory\n");
						exit(1);
					}
					mqueue_enqueue(events, (void *)mc, sizeof(msg_command));
				}
			} else if (c == 127) { // Check backspace
				if (pos > 0) {
					--pos;
					mvwaddch(inputW, 1, pos + 2, ' ');
					command[pos] = 0;
				}
			} else {
				mvwaddch(inputW, 1, pos + 1, c);
				command[pos] = c;
				++pos;
			}
		}
	}

	cleanup(0);

	return 0;
}