Q1: Como se integra o código?

  • Existem duas formas diferentes que podem usar para o fazer, sem ser necessário  grandes alterações à vossa estrutura:
    1.  Nao alterar o cliente-servidor de cada parte e usar os ficheiros para coordenar a execução. Nesta forma, o master preenche os quizes e o jogador usa o(s) ficheiro(s) que master gera para jogar. 
    2.  Criar um servidor ao qual todos os clientes (master, player e analytics) se ligam e que fas de intermediarios com os vossos servidores. OU seja, recebe todos os pedidos e depois (conforme o seu tipo) reenvia para o servidor respectivo. 
Q2: O código do grupo não funciona totalmente. O que devo e não devo fazer ?
  • Escolher um dos modelos anteriores e preparar o teu componente para funcionar. 
    1.  criar os ficheiros para os outros acederem ou ler ficheiros (como se tenham sido criados por outros) e sinalizar o acesso, para impedir acessos simultaneos.
    2. Para alem do que foi apresentado antes, criar o servidor intermedio e dirigir todas as questoes para o vosso sevidor-
  • O que não deve fazer: a parte do código dos restantes membros do grupo.
Q3: Qual das duas soluções devo usar?
  • A primeira é claramente mais simples. 
Q4: `É necessário ter vários clientes (do mesmo Tipo) a correr?
  • Sim.

Q5: Como posso implementar vários clientes usando UDP?Com sockets UDP é simples, porque o servidor quando recebe uma mensagem sabe de que cliente recebeu (através do endereço) e por isso sabe a quem responder.
Q6: Como posso implementar vários clientes usando TCP?existem duas soluções diferentes. 
  1. Criar uma thread para a comunicação com cada cliente (a seguir ao accept)
  2. Usar o select e seguir o modelo que foi apresentado no exemplo (código do cliente).


COMPONENTE INDIVIDUAL
Q1: O que é o diagrama de mensagens? O que é o formato da mensagem?
  • O formato da mensagens é definição dos campos que compõem cada tipo de mensagem.
Q2: O que fazer para definir o formato das mensagens?
  • O primeiro passo é definir a lista de mensagens diferentes que a usar. Duma forma muito simples, a cada tipo de acção está associada uma mensagem.
  • Depois, é preciso identificar a informação que deve ser incluida para se poder realizar essa ação. Isto é, a lista de campos da mensagem.
Q3: Não sei se percebi bem como se estrutura uma mensagem. Sera que pode dar um exemplo?
  • No caso do código de exemplo, existem 4 mensagens diferentes. porque se podem fazer 4 ações distintas:
    • Registar o utilizador: (mensagem IAM)
    • Dizer Ola ao servidor: (mensagem HELLO)
    • Dizer Ola a um utilizador registado atraves do servidor: (Mensagem HELLOTO)
    • Fim: Tipo de mensagem (KILLSERVER)
  • No caso da mensagem de registo, temos de saber o nome do utilizador que se quer registar, então a mensagem tem 2 campos: tipo  e nome do utilizador. 
  • No caso do Ola, nao preciso de dar nenhum nome, entao a  mensagem so tem um campo: Tipo:
Q4: Como se representa  o formato da mensagens?
  • Tomando como exemplo o caso de teste:
  • Mensagem: Tipo [user_name]        Com [] parametro opcional (função do tipo de mensagem)
  • Tipo: {IAM, HELLO, HELLOTO, KILLSERVER}
  • Formato detalhado por tipo:
    • IAM <user name>
    • HELLO
    • HELLOTO <remote_user_name>
    • KILLSERVER
Q5: O que é o diagrama de mensagens?
  • O diagrama de mensagens são as sequências possíveis das interações entre os clientes e o servidor. 

Q6: Que tipos de situações se representam no diagrama de mensagens?
  • As interações normais entre o cliente e o servidor.
  • As interações de excepção, em que o cliente não interage com o servidor de acordo com o comportamento expectável.
Q7: Que tipos de excepção se devem prever?
  • Existem muitas, mas as mais comuns são: envio de mensagens que não seguem o formato definido, que têm parâmetros em falta, sequências de ação inválidas, falta da autorização para realizar determinada ação.
Q8: O que é uma máquina de estados?
  • Se não sabe o que é, não tente usar. Use os diagramas de mensagem