Chat global

Chat
Loading the chat ...
Comunicação Socket ...
 
Notifications
Clear all

Comunicação Socket entre Client Side e Server Side.

13 Posts
8 Usuários
9 Reactions
334 Visualizações
Will
 Will
(@will)
Posts: 42
Conselheiro
Topic starter
 

 

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

 
Postado : 10/05/2025 11:10 am
PoTrAs18 and jhonnyDev reacted
(@Anônimo 38)
Posts: 20
 

Qual é o seu contato no Discord?


 
Postado : 10/05/2025 10:50 pm
saokizayta
(@saokizayta)
Posts: 6
Apoiador Ativo
 

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   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 😘 

 

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

 
Postado : 15/05/2025 2:10 pm
Will
 Will
(@will)
Posts: 42
Conselheiro
Topic starter
 

@ryanoviski warwenczack#4794


William Varvenczak

 
Postado : 16/05/2025 2:33 pm
saokizayta and GuiiO reacted
Will
 Will
(@will)
Posts: 42
Conselheiro
Topic starter
 

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


William Varvenczak

 
Postado : 16/05/2025 2:34 pm
GuiiO reacted
b4ruc
(@b4ruc)
Posts: 19
Mentor Respeitado
 

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

 
Postado : 17/05/2025 2:50 am
JulianoJCMPT
(@julianojcmpt)
Posts: 29
Mentor Respeitado
 

@b4ruc este sistema socket estou tendo problema para me conectar no server. pode me ajudar?


 
Postado : 13/07/2025 4:47 am
 XxX
(@xxx)
Posts: 1
Aprendiz
 

estou refazendo


 
Postado : 10/08/2025 11:05 pm
(@datway)
Posts: 7
Apoiador Ativo
 

Esse sistema de socket está diretamente ligado ao atraso do dano no pvp? e no tempo de renascimento dos mobs?

 


 
Postado : 14/08/2025 10:42 am
Will reacted
Will
 Will
(@will)
Posts: 42
Conselheiro
Topic starter
 

@datway o sistema de socket está diretamente ligado a toda e qualquer informação que precisa passar do cliente pro server e pro cliente depois novamente, então a resposta é sim, está diretamente ligada ao atraso do dano no pvp. Porém existem diversas outras coisas como a latencia da internet (host e player), precisa fazer uma investigação no seu caso do que realmente pode ser, se é o host, o player ou o sistema de socket. Mas já adianto que dificilmente o problema está no sistema de socket, pois é a forma mais rápida e direta de fazer uma comunição entre cliente e server, caso você mudar para um sistema de mensageria mais robusta e mais moderna (como rabbitMQ ou kafka por exemplo), acredito que a latência possa aumentar. Enfim, cada caso é um caso e vale você analisar e quantificar onde pode estar o seu problema.


William Varvenczak

 
Postado : 14/08/2025 1:14 pm
datway reacted
(@datway)
Posts: 7
Apoiador Ativo
 

@will entendi mano. estou utilizando a files do Happy e dei uma comparada com a do world em relação ao sistema de socket e vi que a do happy é bem simples, por isso estava em dúvida.


 
Postado : 14/08/2025 1:37 pm
jhonnyDev and Will reacted
Will
 Will
(@will)
Posts: 42
Conselheiro
Topic starter
 

@xxx log n precisa né? kkkkkkkk


William Varvenczak

 
Postado : 14/08/2025 3:46 pm
Unknown Power
(@unknown-power)
Posts: 1
Aprendiz
 

bom tutorial, lembrando que para um pacote ser recebido da maneira correta (sem perda de dados) o tamanho maximo do pacote deve ser de 8192.


 
Postado : 28/08/2025 12:30 am
Compartilhar:

Anúncio