programando seu jogo para rodar em rede

Post on 21-Feb-2017

206 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Programando seu jogo para rodar em rede

Kelvin Oliveira

V 1.0

• Primeiro, baixe o código em que me baseei para criar a struct Rede

• Lembrando que são dois códigos-fonte: um faz o papel de cliente e o outro, de servidor

• LINKS: CLIENTE | SERVIDOR

• Teste esses códigos no seu computador e procure compreende-los

• Com eles você pode fazer seu jogo funcionar em rede

• Agora, vou ensinar a usar struct que criei para modularizar o código do autor

Funções da struct Rede

bool WinSockInit();

void EncerraWinSock();

void FlagsInit();

bool ServerInit(int portaServidor);

bool ClientInit(char *ipServidor,int portaServidor);

bool RecebeDoClient();

bool EnviaParaOClient(char pacote[PACKET_MAX_SIZE]);

bool EnviaParaOServer(char pacote[PACKET_MAX_SIZE]);

bool RecebeDoServer();

bool AceitaConexaoClient();

bool ConectaServer();

bool FechaConexaoClient();

void FechaSocketClient();

void FechaSocketServer();

Vamos começar pelo inicio e pelo fim da utilização da biblioteca

Primeiro passo:

Utilize a função WinSockInit() no inicio da função main() do seu jogo

Último passo:

Utilize a função EncerraWinSock() no final da função main() e antes do “return 0;”

ANTES DE INICIALIZAR O SERVIDOR E OCLIENTE

Segundo passo:

Utilize a função FlagsInit() para inicializar as flags com um valor conhecido e padrão (false)

Terceiro Passo – Inicializando oscomponentes da rede

Esta inicialização dependerá da opção selecionada pelo jogador: ou cliente ou servidor...

Terceiro Passo – Inicialização do servidor

A inicialização do servidor é feita com a função ServerInit que recebe um parâmetro:

• A porta onde o servidor estará disponível (int)

• Ex: ServerInit(20131);

Terceiro Passo – Inicialização do cliente

A inicialização do cliente é feita com a função ClienteInit que recebe dois parâmetros:

• O IP do servidor

• A porta onde o servidor estará disponível (int)

• Ex: ClientInit(“127.0.0.1”,20131);

Quarto passo – Conexão entre cliente e servidor

Assim como no passo 3, cliente e servidor precisam fazer ações para que tudo ocorra corretamente.

Mas, agora as coisas são sequenciais. Primeiro, o servidor abre um socket de conexão e depois o cliente conecta-se ao socket.

Quarto passo – Servidor esperaa conexão do cliente

O servidor precisa ficar esperando uma conexão do cliente

Ele vai fazer absolutamente nada a não ser esperar pela conexão (tenha isso em mente)

Isso pode ser feito com a função AceitaConexaoClient() que retorna true quando o cliente se conectar ao socket

Quarto passo– Cliente conecta-seao servidor

Se o servidor está esperando a conexão do cliente, então o cliente pode se conectar ao socket do servidor

Utilize a função ConectaServer() para isso. Ele vai retornar true, caso a conexão ocorra.

Quinto Passo – Envie os Pacotes

- Cliente e servidor estão conectados. Portanto,você pode enviar dados do jogo. Para isso...

– Verifique o valor da variável clienteOuServidor que vai ser igual ou a “servidor” ou a “cliente” depedendo da função Init utilizada

Quinto Passo – Envie os Pacotes

– Se o elemento da rede for servidor, então utilize a função EnviaParaOClient() que recebe uma mensagem (pacote) como parâmetro

- Caso contrário, use EnviaParaOServer passando uma mensagem como parâmetro

Sexto passo – Receba os pacotes

– Utilize as funções RecebeDoCliente ou RecebeDoServerpara receber os pacotes. Quando retornar true, um novo pacote foi recebido

- Para verificar o conteúdo do pacote utilize:[nome_da_variavel].pacoteEx: minhaRede.pacote

Sexto passo – Receba os pacotes

– Assim como o servidor não faz nada a não ser esperarPela conexão do cliente, o recebimento dos pacotes é prioridade total para o servidor e para o cliente

- Eles só vão executar outras ações do jogo quando a função de receber pacotes retornar true (pacote chegou) ou false (erro de conexão entre os sockets)

Por enquanto é só isso.

Até a próxima versão do tutorial o/

top related