Anúncio
Comunicação Socket entre Client Side e Server Side.

Faaaala Dev, blz?? 😉
Vou falar de um assunto aqui que nunca vi tutorial na net/foruns(sobre priston) e acredito que algumas pessoas não sabem como funciona ou nem sabem que existe, que é a comunicação de socket entre o client side e o server side.
Ta, mas o que é isso? Nada mais que uma especie de comunicação entre o front end e o back end, ou seja, poder mandar informações do client side pro server side para poder gravar as informações no banco ou trazer as informações do banco para o game.
Primeiramente, você precisa entender o que quer fazer com isso, aí a criatividade é com vocês 😀.
Vamos lá!
Para iniciar, você precisa criar uma identificação "código" para essa comunicação, precisa criar uma assinatura pra ele que nesse caso é o 0x283332, como se fosse um ID/CODE que você vai usar para identificar ele na comunicação.
#define PACKET_SEND_QUALQER_COISA 0x283332
Também será necessário você criar um objeto pacote que seria enviado e/ou recebido por alguma das partes, como por exemplo:
struct sFazerAlgumaCoisa { int size; int code; double informacaoQueVaiSerEnviadaOuRecebida; };
Então você preenche e envia esse socket:
if (Player && Player->lpsmSock) { sFazerAlgumaCoisa packet; ZeroMemory(&packet, sizeof(packet)); double info = 99999; packet.size = sizeof(sFazerAlgumaCoisa); packet.code = PACKET_SEND_QUALQUER_COISA; packet.informacaoQueVaiSerEnviadaOuRecebida = info; Player->lpsmSock->Send((char*)&packet, packet.size, TRUE); }
Nesse caso eu estou enviando esse pacote do Backend para o Frontend (server para client). Como no exemplo acima eu enviei do client para o game, você precisa receber e manipular esse socket lá no game, mas antes disso você também precisa criar a mesma assinatura no game, assim como fez no server:
#define PACKET_SEND_QUALQER_COISA 0x283332
Assim como também precisa criar o struct que você passou como parametro pro socket la no server, aqui no game também:
struct sFazerAlgumaCoisa { int size; int code; double informacaoQueVaiSerEnviadaOuRecebida; };
Agora você já pode receber esse socket e manipular as informações dele.
No caso de enviar informação para o game, você já tem muitos exemplos lá no fonte netplay.cpp para poder receber e tratar as informações do socket, então só adicionar mais uma condição para verificar a assinatura da comunicação e ser feliz, como por exemplo:
case PACKET_SEND_QUALQUER_COISA: { sFazerAlgumaCoisa* smPacket; smPacket = (sFazerAlgumaCoisa*)pData->Buff; double teste = smPacket->informacaoQueVaiSerEnviadaOuRecebida; //Aqui você pode fazer o que quiser com ela }
Sei que o tutorial não ficou muuuuuito bom, fiz ele com um pouco de pressa e também não sei se vai ser útil para alguém, então se ficou alguma dúvida ou precisarem de um tutorial com mais explicação, pode deixar aqui no comentário que em um futuro próximo se houver a necessidade, eu posso criar algo mais detalhado.
Espero que possa ajudar alguém 😘
William Varvenczak
Qual é o seu contato no Discord?

Postado por: @will
Faaaala Dev, blz?? 😉
Vou falar de um assunto aqui que nunca vi tutorial na net/foruns(sobre priston) e acredito que algumas pessoas não sabem como funciona ou nem sabem que existe, que é a comunicação de socket entre o client side e o server side.
Ta, mas o que é isso? Nada mais que uma especie de comunicação entre o front end e o back end, ou seja, poder mandar informações do client side pro server side para poder gravar as informações no banco ou trazer as informações do banco para o game.
Primeiramente, você precisa entender o que quer fazer com isso, aí a criatividade é com vocês 😀.
Vamos lá!
Para iniciar, você precisa criar uma identificação "código" para essa comunicação, precisa criar uma assinatura pra ele que nesse caso é o 0x283332, como se fosse um ID/CODE que você vai usar para identificar ele na comunicação.
#define PACKET_SEND_QUALQER_COISA 0x283332
Também será necessário você criar um objeto pacote que seria enviado e/ou recebido por alguma das partes, como por exemplo:
struct sFazerAlgumaCoisa { int size; int code; double informacaoQueVaiSerEnviadaOuRecebida; };
Então você preenche e envia esse socket:
if (Player && Player->lpsmSock) { sFazerAlgumaCoisa packet; ZeroMemory(&packet, sizeof(packet)); double info = 99999; packet.size = sizeof(sFazerAlgumaCoisa); packet.code = PACKET_SEND_QUALQUER_COISA; packet.informacaoQueVaiSerEnviadaOuRecebida = info; Player->lpsmSock->Send((char*)&packet, packet.size, TRUE); }Nesse caso eu estou enviando esse pacote do Backend para o Frontend (server para client). Como no exemplo acima eu enviei do client para o game, você precisa receber e manipular esse socket lá no game, mas antes disso você também precisa criar a mesma assinatura no game, assim como fez no server:
#define PACKET_SEND_QUALQER_COISA 0x283332Assim como também precisa criar o struct que você passou como parametro pro socket la no server, aqui no game também:
struct sFazerAlgumaCoisa { int size; int code; double informacaoQueVaiSerEnviadaOuRecebida; };Agora você já pode receber esse socket e manipular as informações dele.
No caso de enviar informação para o game, você já tem muitos exemplos lá no fonte netplay.cpp para poder receber e tratar as informações do socket, então só adicionar mais uma condição para verificar a assinatura da comunicação e ser feliz, como por exemplo:
case PACKET_SEND_QUALQUER_COISA: { sFazerAlgumaCoisa* smPacket; smPacket = (sFazerAlgumaCoisa*)pData->Buff; double teste = smPacket->informacaoQueVaiSerEnviadaOuRecebida; //Aqui você pode fazer o que quiser com ela }
Sei que o tutorial não ficou muuuuuito bom, fiz ele com um pouco de pressa e também não sei se vai ser útil para alguém, então se ficou alguma dúvida ou precisarem de um tutorial com mais explicação, pode deixar aqui no comentário que em um futuro próximo se houver a necessidade, eu posso criar algo mais detalhado.
Espero que possa ajudar alguém 😘
Seria ótimo se você pudesse indicar em quais arquivos adicionar o código. em arquivos do lado do servidor e do lado do cliente.
Como o lado do cliente chamará esses pacotes?
Obrigado por compartilhar com a comunidade, eu realmente apoio você,
Priston Tale

@ryanoviski warwenczack#4794
William Varvenczak

@saokizayta show mano, assim que tiver um tempinho eu faço um tutorial mais completo então, com um exemplo mais real.
William Varvenczak

caso alguem esteja interessado no sistema de socket atualizado ou até mesmo sincronizações, só entrar em contato
Devs de qualidade para o seu servidor? vem com a gente
https://www.facebook.com/PristonDevs
@b4ruc este sistema socket estou tendo problema para me conectar no server. pode me ajudar?
- 15 Fóruns
- 83 Tópicos
- 307 Posts
- 0 Online
- 102 Membros