Exemple #1
0
TCPClientSocket::TCPClientSocket(const char* destination, Bit16u port) {
#ifdef NATIVESOCKETS
	nativetcpstruct=0;
#endif
	sendbuffer=0;
	isopen = false;
	if(!SDLNetInited) {
        if(SDLNet_Init()==-1) {
			LOG_MSG("SDLNet_Init failed: %s\n", SDLNet_GetError());
			return;
		}
		SDLNetInited = true;
	}	
	mysock=0;
	listensocketset=0;
	
	IPaddress openip;
	//Ancient versions of SDL_net had this as char*. People still appear to be using this one.
	if (!SDLNet_ResolveHost(&openip,const_cast<char*>(destination),port)) {
		listensocketset = SDLNet_AllocSocketSet(1);
		if(!listensocketset) return;
		mysock = SDLNet_TCP_Open(&openip);
		if(!mysock) return;
		SDLNet_TCP_AddSocket(listensocketset, mysock);
		isopen=true;
	}
}
bool TCPConnectionServer::StartServer( )
{
	if (!isServer )
	{
		std::cout << "TCPConnection.cpp@" << __LINE__ << " Not in server mode, can't start server" << std::endl;
		return false;
	}

	bool quit = false;
	while ( !quit )
	{
		if ( AcceptConnection() )
		{

			std::cout << "TCPConnection.cpp@" << __LINE__ << "Accepted connection...\n";
			if ( SetServerSocket() )
			{
				SDLNet_TCP_AddSocket( socketSet, serverSocket[ serverSocket.size() - 1] );

				quit = true;
				return true;
			}
		}
		SDL_Delay( 20 );
	}
	return false;
}
Exemple #3
0
TCPClientSocket::TCPClientSocket(TCPsocket source) {
#ifdef NATIVESOCKETS
	nativetcpstruct=0;
#endif
	sendbuffer=0;
	isopen = false;
	if(!SDLNetInited) {
        if(SDLNet_Init()==-1) {
			LOG_MSG("SDLNet_Init failed: %s\n", SDLNet_GetError());
			return;
		}
		SDLNetInited = true;
	}	
	
	mysock=0;
	listensocketset=0;
	if(source!=0) {
		mysock = source;
		listensocketset = SDLNet_AllocSocketSet(1);
		if(!listensocketset) return;
		SDLNet_TCP_AddSocket(listensocketset, source);

		isopen=true;
	}
}
Exemple #4
0
bool NetClient::connecttoserver()
{
	//if(SDLNet_ResolveHost(&ip, game_values.hostaddress, 12521) == -1) 
	//if(SDLNet_ResolveHost(&ip, "10.115.8.222", 12521) == -1) 
	//if(SDLNet_ResolveHost(&ip, "10.115.5.65", 12521) == -1) 
	if(SDLNet_ResolveHost(&ip, "192.168.0.2", 12521) == -1) 
	//if(SDLNet_ResolveHost(&ip, "127.0.0.1", 12521) == -1) 
	{
		printf("SDLNet_ResolveHost: %s\n", SDLNet_GetError());
		return false;
	}

	tcpsock = SDLNet_TCP_Open(&ip);
	
    if(!tcpsock) {
		printf("SDLNet_TCP_Open: %s\n", SDLNet_GetError());
		return false;
	}

	/* Allocate the socket set for polling the network */
	socketset = SDLNet_AllocSocketSet(1);
    if (socketset == NULL) {
		printf("Couldn't create socket set: %s\n", SDLNet_GetError());
		return false;
	}

	SDLNet_TCP_AddSocket(socketset, tcpsock);
	
	return true;
}
int game_host::waitForClient_test()
{
	cout << "waiting for first player to connect...\n";
	while(!(player1sd = SDLNet_TCP_Accept(sd))) //wait for first connection, with 50ms delay to keep CPU down
		SDL_Delay(50);

	string ipMess = "";
	while(SDLNet_UDP_Recv(p1UDPsock, UDPpack1) == 0)
		SDL_Delay(5);
	SDLNet_UDP_Bind(p1UDPsock,10,&(UDPpack1->address));

	cout << this->recieveMessagep1() << "\n"; //on successful connect, client sends a message

	SDLNet_TCP_AddSocket(socketset, player1sd); //could error check here
	this->player1ip = SDLNet_TCP_GetPeerAddress(player1sd);
	//SDLNet_ResolveHost(&(UDPpack1->address), cl.c_str(), port);
	//player2ip->host = SDLNet_TCP_GetPeerAddress(player1sd)->host;
	//player2ip->port = port;

	//UDPpack1->address = *player1ip;

	sendtoP1_test("1SIG:START");
	cout << "client connected, continuing...\n";
	return 1;
}
/*  Setup TCP Server, and wait for a single
 *  client to connect */
int setup_server(unsigned port) { 

#if !defined(PSP) && !defined(EMSCRIPTEN) && !defined(DREAMCAST) && !defined(THREE_DS)
    is_server = 1;

    log_message(LOG_INFO, "Starting server on port %u\n",port);

    //SDL_INIT(SDL_INIT_EVERYTHING); 
    SDLNet_Init();   

    IPaddress ip;
    SDLNet_ResolveHost(&ip, NULL, port);

    server = SDLNet_TCP_Open(&ip);

    log_message(LOG_INFO, "Waiting for client to connect\n");
    
    while (client == NULL) {
        client = SDLNet_TCP_Accept(server);
        SDL_Delay(1000);
    }
    const char * message = "Welcome to GB server";
    SDLNet_TCP_Send(client, message, strlen(message) + 1);
    log_message(LOG_INFO, "Client successfully connected\n");
    socketset = SDLNet_AllocSocketSet(1); 
    SDLNet_TCP_AddSocket(socketset, client);
    connection_up = 1;
    return 1;
#endif
    return 0;
}
Exemple #7
0
void new_connection(TCPsocket sock) {
   TCPsocket tmp;
   struct socket_node *socket;
   IPaddress *ip;
 
/* accept the connection temporarily */
   tmp = SDLNet_TCP_Accept(sock);
   if (!tmp)
      do_error(SDLNet_GetError());

/* are we full or game already started? */
   if (get_active_players() + 1 > NUM_PLAYERS || current_turn)
      SDLNet_TCP_Close(tmp);
   else {
   /* nope! */
      socket = new_socket(SOCKET_CLIENT);
      socket->sock = tmp;
      if (SDLNet_TCP_AddSocket(sockset, tmp) < 0)
         do_error(SDLNet_GetError());

      ip = SDLNet_TCP_GetPeerAddress(tmp);
      if (!ip)
         do_error(SDLNet_GetError());
      if (SDLNet_ResolveIP(ip))
         strcpy(socket->host, SDLNet_ResolveIP(ip));
      else
         sprintf(socket->host, "Unknown IP");

      join_player(socket);	/*	add player to game	*/
   }
}
Exemple #8
0
bool IRC::connect(const std::string &serverName, int serverPort, const std::string &nick)
{
	disconnect();
	
	IPaddress ip;
	socketSet = SDLNet_AllocSocketSet(1);
	if (SDLNet_ResolveHost(&ip, (char *)serverName.c_str(), serverPort)==-1)
	{
		fprintf(stderr, "YOG : ResolveHost: %s\n", SDLNet_GetError());
		return false;
	}

	socket = SDLNet_TCP_Open(&ip);
	if (!socket)
	{
		fprintf(stderr, "YOG : TCP_Open: %s\n", SDLNet_GetError());
		return false;
	}

	SDLNet_TCP_AddSocket(socketSet, socket);
	
	// Here we change the nick on yog for the IRC
	// changing from nick = "nick" to YOGnick = "YOGnick"
	this->nick = "[YOG]" + nick;

	sendString("USER " + this->nick + " undef undef " + PACKAGE_TARNAME + "-" + PACKAGE_VERSION);
	sendString("NICK " + this->nick);

	return true;
}
Exemple #9
0
void accept_connections()
{
  if (SDLNet_SocketReady(serversock))
    {
      TCPsocket client = SDLNet_TCP_Accept(serversock);
      if (client)
        {
          clients.push_back(new ClientConnection(clients.size()+1, client));

          std::stringstream out;
          out << "version 0" << std::endl;
          out << "your_id " << clients.size() << std::endl;
          std::string str = out.str();
          SDLNet_TCP_Send(client, const_cast<char*>(str.c_str()), str.length()+1);

          IPaddress* ip = SDLNet_TCP_GetPeerAddress(client);

          const char* host;
          if((host = SDLNet_ResolveIP(ip)) != 0)
            std::cout << "# Got client connection from " << host << " " << ip->port << std::endl;
          else
            std::cout << "# Got client connection from " << ip->host << " " << ip->port << std::endl;

          int numused = SDLNet_TCP_AddSocket(socketset, client);
          if (numused == -1) {
            printf("SDLNet_AddSocket: %s\n", SDLNet_GetError());
            // perhaps you need to restart the set and make it bigger...
          }
          else
            {
              std::cout << "# Sockets used: " << numused << std::endl;
            }
        }
    }
}
Exemple #10
0
	  int TCP_RECEIVEOBJ::connect()
	  {
	 	sock=0;
		if(SDLNet_ResolveHost(&ip, host, PORT) == -1)
		{
			strcpy(szdata, "SDLNet_ResolveHost: "); strcat(szdata, SDLNet_GetError());
			report_error(szdata); return(FALSE);
		}
		
		sock = SDLNet_TCP_Open(&ip);
		if(!sock)
		{
			strcpy(szdata, "SDLNet_TCP_Open: "); strcat(szdata, SDLNet_GetError());
			report_error(szdata);return(FALSE);
		}
		
		set = SDLNet_AllocSocketSet(1);
		if(!set)
		{
			strcpy(szdata,"SDLNet_AllocSocketSet: "); strcat(szdata, SDLNet_GetError());
			report_error(szdata);return(FALSE);
		}
		
		if (SDLNet_TCP_AddSocket(set, sock) == -1)
		{
			strcpy(szdata,"SDLNet_TCP_AddSocket: ");strcat(szdata, SDLNet_GetError());
			report_error(szdata);return(FALSE);
		}
		if (!sock) return(FALSE);
		cout<<"connected.";
		return(TRUE);
	  }
 void Connection::makeSet(int max){
     ScopedMutexLock(pimpl_->dataAccess);
     //  remove from old group
     if( pimpl_->group && pimpl_->userSocket ){
         SDLNet_TCP_DelSocket(pimpl_->group, pimpl_->userSocket);
     }
     //  if internal set was used, destroy it
     if( pimpl_->createdSet ) {
         SDLNet_FreeSocketSet(pimpl_->group);
         pimpl_->group = NULL;
         pimpl_->createdSet = false;
     }
     //create new set
     pimpl_->group = SDLNet_AllocSocketSet(max);
     if( pimpl_->group == NULL ){
         std::cerr << __FILE__ << " " << __LINE__ << ": " << "SDLNet_AllocSocketSet(" << max << "): " << SDLNet_GetError() << std::endl;
         exit(EXIT_FAILURE);
     } else {
         // add self to new group
         if( pimpl_->userSocket ){
             SDLNet_TCP_AddSocket(pimpl_->group, pimpl_->userSocket);
         }
         pimpl_->createdSet = 1;
     }
 }
/**************************************
 * CLIENT
 *************************************/
int BomberNetClient::connectClient(SDL_Surface * vout_buf) {
	errorCode = 0;
	IPaddress serverIP;

	fprintf(stderr, "%s\n", GameConfig::Instance().getIpString());
	viewer = new ClientViewer(vout_buf);
	startKeystateThread();
	SDLNet_ResolveHost(&serverIP, GameConfig::Instance().getIpString(), GameConfig::Instance().getPortValue());

	if (serverIP.host == INADDR_NONE) {
		fprintf(stderr, "Couldn't resolve hostname\n");
		cleanup();
	} else {
		/* If we fail, it's okay, the GUI shows the problem */
		tcpsock = SDLNet_TCP_Open(&serverIP);
		if (tcpsock == NULL) {
			fprintf(stderr, "Connect failed\n");
			cleanup();
			return 1;
		} else {
			fprintf(stderr, "Connection established !\n");
			socketset = SDLNet_AllocSocketSet(1);
			SDLNet_TCP_AddSocket(socketset, tcpsock);
			alive = true;
			net_thread = SDL_CreateThread(net_thread_main, "tcp client thread", tcpsock);
			return 0;
		}
	}
	return 2;
}
void
ServerConnection::connect(const char* hostname, Uint16 port)
{
    IPaddress ip;

    if(SDLNet_ResolveHost(&ip, hostname, port) == -1)
    {
        printf("SDLNet_ResolveHost: %s\n", SDLNet_GetError());
        exit(1);
    }

    tcpsock = SDLNet_TCP_Open(&ip);
    if(!tcpsock)
    {
        printf("SDLNet_TCP_Open: %s %s:%d\n", SDLNet_GetError(), hostname, port);
        exit(2);
    }
    else
    {
        std::string line = "client_version 1\n";
        SDLNet_TCP_Send(tcpsock, const_cast<char*>(line.c_str()), line.length());

        socketset = SDLNet_AllocSocketSet(1);
        SDLNet_TCP_AddSocket(socketset, tcpsock);
    }
}
/* Setup TCP Client, and attempt to connect
 * to the server */
int setup_client(unsigned port) {

#if !defined(PSP) && !defined(EMSCRIPTEN) && !defined(DREAMCAST) && !defined(THREE_DS)
    is_client = 1;

    log_message(LOG_INFO, "Attempting to connect to server on port %u\n",port);
    //SDL_INIT(SDL_INIT_EVERYTHING); 
    SDLNet_Init();   

    IPaddress ip;
    //TODO, for now always connect to localhost, fix for any specified ip in
    //the future
    SDLNet_ResolveHost(&ip, "localhost", port);

    client =  SDLNet_TCP_Open(&ip);
    socketset = SDLNet_AllocSocketSet(1); 
    char buf[100];
    int i = SDLNet_TCP_Recv(client, buf, 100);
    for (int j = 0; j < i; j++) {
        printf("%c",buf[j]);
    }
    printf("\n");
    SDLNet_TCP_AddSocket(socketset, client);
    connection_up = 1;
    return 1;
#endif
    return 0;

}
Exemple #15
0
bool NetServer::startserver()
{
	socketset = SDLNet_AllocSocketSet(MAXCLIENTS + 1);

    if (socketset == NULL) {
		printf("Couldn't create socket set: %s\n", SDLNet_GetError());
		return false;
	}

	SDLNet_ResolveHost(&ip, NULL, 12521);

	printf("Server IP: %x:%d\n", ip.host, ip.port);

	tcpsock = SDLNet_TCP_Open(&ip);
	
    if (tcpsock == NULL) {
		cleanup();
		printf("Couldn't create server socket: %s\n", SDLNet_GetError());
		return false;
	}

	SDLNet_TCP_AddSocket(socketset, tcpsock);

	return true;
}
Exemple #16
0
Socket::Socket(TCPsocket sock) : error(false), sock(sock) {
    set = SDLNet_AllocSocketSet(1);
    if (set == NULL)
        error = true;
    else
        SDLNet_TCP_AddSocket(set, sock);
}
Exemple #17
0
void Users::process(){
    int n = SDLNet_CheckSockets(set, 0);
    if (n < 1) return;

    if (SDLNet_SocketReady(sock)){
        printf("new user...\n");
        TCPsocket newuser = SDLNet_TCP_Accept(sock);

        printf("Accepted...\n");
        User *u = new User(newuser);
        push_back(u);
        SDLNet_TCP_AddSocket(set,newuser);
    }

    User *u;
    for( iterator i = begin(); i != end(); i++ ){
        u = *i;
        if (SDLNet_SocketReady(u->sock)){
            int len;
            char buf[MAXLEN];
            if ((len = readLine(u->sock,buf,sizeof(buf))) > 0){
                fprintf(stderr,"got len=%d text from '%s': '%s'\n",len,u->name,buf);
                handle_command(buf,u);
            } else {
                printf("dead connection\n");
                SDLNet_TCP_DelSocket(set, u->sock);
                SDLNet_TCP_Close(u->sock);
                i = erase(i);
            }
        }
    }
}
Exemple #18
0
/* create a socket set that has the server socket and all the client sockets */
SDLNet_SocketSet create_sockset()
{
	static SDLNet_SocketSet set=NULL;
	int i;

	if(set)
		SDLNet_FreeSocketSet(set);
	set=SDLNet_AllocSocketSet(num_clients+1);
	if(!set) {
		printf("SDLNet_AllocSocketSet: %s\n", SDLNet_GetError());
		exit(1); /*most of the time this is a major error, but do what you want. */
	}
	SDLNet_TCP_AddSocket(set,server);
	for(i=0;i<num_clients;i++)
		SDLNet_TCP_AddSocket(set,clients[i].sock);
	return(set);
}
 Connection::Connection(SDLNet_SocketSet& newGroup, TCPsocket& newUserSocket) : pimpl_(new ConnectionImpl){
     ++pimpl_->refCount;
     pimpl_->group = newGroup;
     pimpl_->userSocket = newUserSocket;
     if( newGroup && newUserSocket ){
         SDLNet_TCP_AddSocket(pimpl_->group, pimpl_->userSocket);
     }
 }
Exemple #20
0
void Users::connect(Universe *_u){
    u = _u;
    SDLNet_Init();
    SDLNet_ResolveHost(&ip,NULL,port);
    sock = SDLNet_TCP_Open(&ip);
    set = SDLNet_AllocSocketSet(10);
    SDLNet_TCP_AddSocket(set,sock);
}
Connection* Connection_create(const char* ip, Uint16 port)
{
    Connection* self = (Connection*)calloc(1, sizeof(Connection));
    if(!self)
    {
        return NULL;
    }

    if(SDLNet_ResolveHost(&self->address, ip, port))
    {
        Connection_destroy(&self);
        return NULL;
    }

    if(!(self->socket = SDLNet_TCP_Open(&self->address)))
    {
        Connection_destroy(&self);
        return NULL;
    }

    if(!(self->socket_set = SDLNet_AllocSocketSet(1)))
    {
        Connection_destroy(&self);
        return NULL;
    }

    if(SDLNet_TCP_AddSocket(self->socket_set, self->socket) == -1)
    {
        Connection_destroy(&self);
        return NULL;
    }

    if(SDLNet_CheckSockets(self->socket_set, 5000) == 1)
    {
        Uint8 message = Connection_recv_flag(self);
        if(message == CONNECTED)
        {
            Uint8 buffer[6] = {0};
            Connection_recv_data(self, buffer, 6);

            self->local_address.host = SDLNet_Read32(buffer);
            self->local_address.port = SDLNet_Read16(buffer + 4);
            printf("Successfully connected to server\n");
            return self;
        }
        else if(message == FULL)
        {
            printf("Server is full\n");
        }
    }
    else
    {
        printf("Server is not responding\n");
    }

    Connection_destroy(&self);
    return NULL;
}
Exemple #22
0
void NetServer::handleserver()
{
	int which;
	unsigned char data;

	TCPsocket newsock = SDLNet_TCP_Accept(tcpsock);

	if (newsock == NULL)
		return;
	
	/* Look for unconnected person slot */
    for (which = 0; which < MAXCLIENTS; ++which) {
        if (!clients[which].sock) {
			break;
		}
	}

    if (which == MAXCLIENTS) {
		/* Look for inactive person slot */
        for (which = 0; which < MAXCLIENTS; ++which) {
            if (clients[which].sock && !clients[which].active) {
				/* Kick them out.. */
				data = NET_MSG_REJECT;
				SDLNet_TCP_Send(clients[which].sock, &data, 1);
				SDLNet_TCP_DelSocket(socketset, clients[which].sock);
				SDLNet_TCP_Close(clients[which].sock);
				numclients--;

#ifdef _DEBUG
				printf("Killed inactive socket %d\n", which);
#endif
				break;
			}
		}
	}

    if (which == MAXCLIENTS) {
		/* No more room... */
		data = NET_MSG_REJECT;
		SDLNet_TCP_Send(newsock, &data, 1);
		SDLNet_TCP_Close(newsock);

#ifdef _DEBUG
		printf("Connection refused -- server full\n");
#endif
    } else {
		/* Add socket as an inactive person */
		clients[which].sock = newsock;
		clients[which].peer = *SDLNet_TCP_GetPeerAddress(newsock);
		SDLNet_TCP_AddSocket(socketset, clients[which].sock);
		numclients++;

#ifdef _DEBUG
		printf("New inactive socket %d\n", which);
#endif
	}
}
Exemple #23
0
static __inline__ int snTCPAddSocket(TCPsocket s)
{
  int val = 0;

  lockSDLNet();
  val = SDLNet_TCP_AddSocket(socketSet, s);
  unlockSDLNet();

  return val;
}
Exemple #24
0
bool CSocketSet::addSocketToSet(TCPsocket sock)
{
	assert(m_socketSet);
	assert(sock);

	if (SDLNet_TCP_AddSocket(m_socketSet, sock) == -1)
      return false;

	return true;
}
Exemple #25
0
void connect(Uint16 port)
{
  IPaddress ip;

  if(SDLNet_ResolveHost(&ip,NULL,port)==-1) {
    printf("SDLNet_ResolveHost: %s\n", SDLNet_GetError());
    exit(1);
  }
  serversock = SDLNet_TCP_Open(&ip);
  if(!serversock) {
    printf("SDLNet_TCP_Open: %s\n", SDLNet_GetError());
    exit(2);
  }

  socketset = SDLNet_AllocSocketSet(32);
  if (!socketset) {
    printf("SDLNet_AllocSocketSet: %s\n", SDLNet_GetError());
    exit(1); //most of the time this is a major error, but do what you want.
  }

  SDLNet_TCP_AddSocket(socketset, serversock);

  while(true)
    {
      int num = 0;
      if ((num = SDLNet_CheckSockets(socketset, 10000)) == -1)
        {
          printf("SDLNet_CheckSockets: %s\n", SDLNet_GetError());
          //most of the time this is a system error, where perror might help you.
          perror("SDLNet_CheckSockets");
        }
      else
        {
          accept_connections();

          for(int i = 0; i < int(clients.size()); ++i)
            {
              if (clients[i])
                clients[i]->update();
            }

          for(int i = 0; i < int(clients.size()); ++i)
            {
              if (clients[i] && clients[i]->is_invalid())
                {
                  std::cout << "# client " << clients[i]->id << " got disconnected" << std::endl;
                  SDLNet_TCP_DelSocket(socketset, clients[i]->tcpsock);
                  SDLNet_TCP_Close(clients[i]->tcpsock);
                  delete clients[i];
                  clients[i] = 0;
                }
            }
        }
    }
}
Exemple #26
0
/**
 * @brief Asignador de la estructura m_Socket
 *
 * @param the_sdl_socket Copia de una estructura TCPsocket para realizar la copia.
 *
 * Si la estructura #m_Socket no es nula, liberará el espacio que ocupa y cerrará el puerto asignado. Acto seguido,
 * realizará la asignación de #m_Socket con el parámetro the_sdl_socket. Si algo ha fallado, SDL_net generará un error.
 */
void CTcpSocket::SetSocket (TCPsocket the_sdl_socket) {
    if (!(m_Socket == NULL)) {
          SDLNet_TCP_DelSocket(set,m_Socket);
          SDLNet_TCP_Close (m_Socket);
      }
    m_Socket = the_sdl_socket;
    if(SDLNet_TCP_AddSocket(set,m_Socket)==-1) {
        std::cerr << "SDLNet_TCP_AddSocket: " << SDLNet_GetError() << std::endl;
        m_Socket = NULL;
    }
}
int game_host::waitForClients()
{
	cout << "waiting for first player to connect...\n";
	while(!(player1sd = SDLNet_TCP_Accept(sd))) //wait for first connection, with 50ms delay to keep CPU down
		SDL_Delay(50);
	string ipMess = "";
	while(SDLNet_UDP_Recv(p1UDPsock, UDPpack1) == 0)
		SDL_Delay(5);
	SDLNet_UDP_Bind(p1UDPsock,10,&(UDPpack1->address));
	cout << this->recieveMessagep1() << "\n"; //client sends its IP

	SDLNet_TCP_AddSocket(socketset, player1sd); //could error check here
	this->player1ip = SDLNet_TCP_GetPeerAddress(player1sd);
	//UDPpack1->address.port = player1ip.port;
	//UDPpack1->address.host = player1ip.host;
	cout << "waiting for second player to connect...\n";
	while(!(player2sd = SDLNet_TCP_Accept(sd)))
		SDL_Delay(50);
	while(!SDLNet_UDP_Recv(p1UDPsock, UDPpack2))
		SDL_Delay(5);
	SDLNet_UDP_Bind(p1UDPsock,10,&(UDPpack2->address));
	//cout << this->recieveMessagep2() << "\n";
	SDLNet_TCP_AddSocket(socketset, player2sd); //could error check here as well
	player2ip = SDLNet_TCP_GetPeerAddress(player2sd);
	//UDPpack2->address.port = player2ip.port;
	//UDPpack2->address.host = player2ip.host;

	if(SDLNet_TCP_Send(player1sd, "1SIG:START", 16 /* buff.length()+1*/) < 16)
	{
		cout << "Message to client 1 failed to send...\n";
		return -1;
	}
	if(SDLNet_TCP_Send(player2sd, "2SIG:START", 16 /*buff.length()+1*/) < 16)
	{
		cout << "Message to client 2 failed to send...\n";
		return -1;
	}

	cout << "both clients connected, continuing...\n";
	return 1;
}
Exemple #28
0
// Creates a socket set that has the server socket and all the client sockets
SDLNet_SocketSet Server::create_sockset()
{
    static SDLNet_SocketSet set = NULL;
    if(set)
        SDLNet_FreeSocketSet(set);
    set = SDLNet_AllocSocketSet(num_clients + 1);
    if(!set)
    {
        std::cerr << "SDLNet_AllocSocketSet: " << SDLNet_GetError()
                  << std::endl;
        return 0;
    }

    SDLNet_TCP_AddSocket(set, server);
    typedef std::map< std::string, TCPsocket >::iterator it_type;
    for (it_type i = clients.begin(); i != clients.end(); i++)
    {
        SDLNet_TCP_AddSocket(set, i->second);
    }
    return set;
}
//-------------------------------------------------------------------------------------
SDLNet_SocketSet GalactiCombatServer::createSockSet()
{
    if(verbose) std::cout << "Entering createSockSet" << std::endl;
    static SDLNet_SocketSet set = NULL;
    
    if(set) SDLNet_FreeSocketSet(set);
    set = SDLNet_AllocSocketSet(clients.size() + 1);
    if(!set)
    {
        std::cerr << "SDLNet_AllocSocketSet done goofed: " << SDLNet_GetError() << std::endl;
        exit(1);
    }
    SDLNet_TCP_AddSocket(set, TCPServerSock);
    for(int i = 0; i < clients.size(); i++)
        if(SDLNet_TCP_AddSocket(set, clients[i]->sock) == -1)
            std::cerr<<"SDLNet_TCP_AddSocket done goofed: "<<SDLNet_GetError()<<std::endl;
//	SDLNet_UDP_AddSocket(set, UDPServerSock);	//TODO: Uncomment when working on UDP.
    
    if(verbose) std::cout << "Exiting createSockSet" << std::endl << std::endl;
    return set;
}
connection accept_connection()
{
	if(!server_socket) {
		return 0;
	}

	// A connection isn't considered 'accepted' until it has sent its initial handshake.
	// The initial handshake is a 4 byte value, which is 0 for a new connection,
	// or the handle of the connection if it's trying to recover a lost connection.

	/**
	 * A list of all the sockets which have connected,
	 * but haven't had their initial handshake received.
	 */
	static std::vector<TCPsocket> pending_sockets;
	static SDLNet_SocketSet pending_socket_set = 0;

	const TCPsocket sock = SDLNet_TCP_Accept(server_socket);
	if(sock) {
		DBG_NW << "received connection. Pending handshake...\n";

		if(pending_socket_set == 0) {
			pending_socket_set = SDLNet_AllocSocketSet(32);
		}

		if(pending_socket_set != 0) {
			int res = SDLNet_TCP_AddSocket(pending_socket_set,sock);

			if (res != -1) {
				pending_sockets.push_back(sock);
			} else {
				ERR_NW << "Pending socket set is full! Disconnecting " << sock << " connection\n";
				ERR_NW << "SDLNet_GetError() is " << SDLNet_GetError() << "\n";

				SDLNet_TCP_Close(sock);
			}
		} else {
			ERR_NW << "Error in SDLNet_AllocSocketSet\n";
		}
	}

	if(pending_socket_set == 0) {
		return 0;
	}

	const int set_res = SDLNet_CheckSockets(pending_socket_set,0);
	if(set_res <= 0) {
		return 0;
	}

	return accept_connection_pending(pending_sockets, pending_socket_set);
}