Autor Wątek: HawkNL i Allegro  (Przeczytany 920 razy)

Offline Jaklub

  • Użytkownik

# Lipiec 28, 2009, 22:38:00
witam. próbuję zaprogramować multiplayera do mojej gry (stwierdziłem, że lepiej będzie to zrobić wcześniej niż później), ale mam kłopoty z zaprogramowaniem lobby.

używam starej biblioteki HawkNL i Allegro. problem jest taki, że klient łączy się z serwerem raz na parę razy, tak jakby połączenia się nie wyłączyły. kiedy kompiluję przykładowy program z HawkNL, nie ma takich problemów.

próbowałem raz zaprogramować to sam, ale po wielu próbach poszedłem na łatwiznę - skopiowałem kod z przykładowego programu i przerobiłem go pod Allegro. niestety, nie ma poprawy.

kod:
hostowanie
int HostNetGame() {
    NLsocket    serversock;
    NLenum      type = NL_RELIABLE_PACKETS;
    NLbyte      string[NL_MAX_STRING_LENGTH];
   
    serversock = nlOpen(25000, type);

    if(serversock == NL_INVALID) {
                  NetErrorMessageBack();
                  allegro_message("Error encountered");
                  return 1;
                  }

    if(!nlListen(serversock)) {
                  nlClose(serversock);
                  NetErrorMessageBack();
                  allegro_message("Error encountered");
                  return 1;
                  }

    memset(client, 0, sizeof(client));

    ServerLobby(serversock);
    return 0;
}

łączenie z serwerem:
int  JoinNetGame() {
    NLsocket    clientsock;
    NLaddress   addr;
    NLbyte      server[] = "127.0.0.1:25000";
    NLenum      type = NL_RELIABLE_PACKETS;
    NLbyte      string[NL_MAX_STRING_LENGTH];

    clientsock = nlOpen(0, type);

    if(clientsock == NL_INVALID) {
                  NetErrorMessageBack();
                  allegro_message("Error encountered");
                  return 1;
                  }

    nlStringToAddr(server, &addr);
       
    if(!nlConnect(clientsock, &addr)) {
                  nlClose(clientsock);
                  NetErrorMessageBack();
                  allegro_message("Error encountered");
                  return 1;
                  }
                 
    ClientLobby(clientsock);
    return 0;
}
serwer działa:
    NLbyte      string[NL_MAX_STRING_LENGTH];

    quit_var=0;
    connected=0;
    while(quit_var==0)
    {
        while( speed > 0) {
                          if(key[KEY_ESC]) quit_var=-1;
                          speed--;
                          }
                     
        NLint   i;
        NLbyte  buffer[128];

        NLsocket newsock = nlAcceptConnection(sock);

        if(newsock != NL_INVALID)
        {
            NLaddress   addr;

            client[clientnum] = newsock;
            clientnum++;
            connected=1;
        }
        else
        {
            if(nlGetError() == NL_SYSTEM_ERROR)
            {
                NetErrorMessageBack();
                allegro_message("Error encountered!");
                quit_var=-1;
            }
        }
        rest(1000 * (0));
       
        // dalej kod wyświetlania informacji
       
    }
lobby klienta
void ClientLobby(NLsocket sock) {
    quit_var=0;
    while(quit_var==0)
    {
        while( speed > 0) {
                          if(key[KEY_ESC]) quit_var=-1;
                          speed--;
                          }
        NLbyte  buffer[128];

        memset(buffer, 0, sizeof(buffer));
        rest(1000 * (0));
       
        while( speed > 0) {
                          if(key[KEY_ESC]) quit_var=0;
                          speed--;
                          }
                         
        rectfill(bufor,0,0,800,500,makecol(0,0,0));
        NetErrorMessageLive();
        textprintf_ex(bufor,font,16,16,makecol(255,255,255),-1,"wormfare online lobby - you are the client");
        blit(bufor,screen,0,0,0,0,800,500);
    }
}

gdzie jest błąd? bardzo mi zależy na tym, żeby zrobić to przy użyciu HawkNL
pomocy

Offline Mr. Spam

  • Miłośnik przetworów mięsnych


Offline Jaklub

  • Użytkownik

# Lipiec 30, 2009, 19:42:07
Poniewaz sie zlamilem, nowa wersja pytania.
Co nalezy robic, aby gra poprawnie hostowala i konczyla prace serwera (to samo z dolaczaniem sie do serwera)? Jakie sockety zamykac i kiedy?

(nie ma polskich znakow bo pisze z PSP)