Como vimos na última sessão, para um par se conectar ao anfitrião é necessário seus endereços de IP e a identificação de ambos. O anfitrião pode ser qualquer um, em qualquer lugar do mundo, portanto, é impossível saber antecipadamente com quem irá se conectar. Para permitir que os jogadores achem uns aos outros há um servidor central separado, chamado de "servidor de sinalização".
O servidor de sinalização não hospeda os jogos (como um anfitrião): quando o primeiro jogador entrar em uma partida, este irá mostrar suas informações para os outros jogadores. Ou seja, o servidor de sinalização é um simples local onde cada jogador pode encontrar um ao outro.
Quando um par deseja se conectar a um anfitrião, o servidor irá retransmitir as informações (como os endereços de IP e as demais informações de conexão entre ambos), permitindo a conexão. Assim que a conexão é estabelecida o servidor já cumpriu sua função e não interfere mais na troca de informação entre eles, passando essa tarefa a ser realizada diretamente pelos jogadores.
TERMINOLOGIA DE SINALIZAÇÃO
O servidor de sinalização precisa evitar misturar os dados dos jogadores de jogos diferentes, permitindo que diferentes grupos de jogadores tenham suas partidas independentes de outros grupos (mesmo jogando todos ao mesmo tempo). Para tal, os jogadores precisam entrar em "salas" específicas em uma "instância de jogo".
O servidor de sinalização inicialmente separa e direciona os jogadores para cada jogo cadastrado no sistema, logo, seu jogo deve estar cadastrado nele com um nome único, a fim de evitar que jogadores de outros jogos acabem no seu e que seus amigos acabem em outro jogo qualquer. Portanto, recomendamos que para cada jogo que você crie seja utilizado um nome diferente e único em todo o mundo (tente por exemplo colocar seu nome ou o nome de sua empresa como "Estúdio8-Asteróides" ou "JoãoCosta-Asteróides" ao invés de usar apenas "Asteróides".
Vale lembrar que esse nome não aparecerá em lugar algum, sendo utilizado apenas internamente pelo próprio servidor, logo, sinta-se livre para adicionar outros detalhes ou nomes que garantem que seu jogo seja único no sistema.
Após isso o servidor separa os jogadores em uma "instância", permitindo que você possa ter ao mesmo tempo diversas versões do seu jogo acontecendo isoladamente. Por exemplo, você pode querer ter uma versão mais "finalizada" do seu jogo rodando para vários jogadores e ao mesmo tempo permitir que alguns outros específicos testem uma versão "beta" de alguma atualização ou versão dele. Esse mecanismo impede que jogadores não desejados acessem a beta e que seus jogadores de teste acabem indo parar na versão normal do jogo. Por isso as instâncias de cada jogo podem cadastradas como versões, tipo "v1.0", "v1.1", "v1.2", e daí em diante. Outra sugestão é criar algumas instâncias diferentes para cada região, como "Europa", "América do Norte", "Ásia" e etc. Isso vai ajudar os jogadores a entrar em partidas de acordo com sua localização, melhorando a qualidade da conexão entre eles. E essas duas recomendações podem até mesmo ser utilizadas juntas como em "Europa-v1.0", "Europa-v2.2" etc.
Por fim, os jogadores podem ser conectados a uma "sala". Cada sala representa um grupo de jogadores que irão jogar juntos uma partida. Os jogadores que não estiverem juntos na mesma sala não irão se ver ou ser influenciados pelos que estiverem em qualquer outra, portanto, para jogar junto com seus amigos faça com que todos estejam na mesma sala. O primeiro jogador a entrar em uma sala será o anfitrião (vimos no primeiro post dessa série), a partir disso o servidor de sinalização irá permitir que todos os outros jogadores tenham acesso a essa sala, além das informações do anfitrião de cada uma (nome do jogador e etc), permitindo que que possam se agrupar e iniciar uma partida.
Assim que todos estiverem conectados o jogo pode começar, e cada um verá e será afetado pelas ações dos outros em tempo real!
No Construct's Multiplayer todas as ações, condições e expressões relacionadas ao servidor de sinalização estão na categoria Signalling(Sinalização).