-
Notifications
You must be signed in to change notification settings - Fork 1
/
arquitetura
79 lines (62 loc) · 3.07 KB
/
arquitetura
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
A arquitetura do War Multiplayer é inspirada pelo modelo MVC
(Model-View-Controller) - modelo, visão e controle, em português. Onde
temos três camadas de classes que trocam mensagens entre si através de
chamadas de métodos.
No modelo padrão, cada camada tem sua responsabilidade dentro da
aplicação em si:
* Modelo (model): Pode ser entendida como uma representação de toda
informação operada pelo sistema. É responsável por aplicar as regras
do negócio, e armazenar as informações.
* Visão (view): É a visualização e manipulação dos dados pelo usuário.
Reponsável por receber os dados do Controle e mostrar ao usuário, além
de notificar o Controle sobre qualquer interação do usuário.
* Controle (controller): É a camada que fica entre os dados (Modelo) e
o usuário (Visão). Interpreta os comandos do usuário na visão e aciona
os modelos para que os dados reflitam esta ação. Também é nesta camada
que os dados são consultados (através de métodos implementados pelo
Modelo) e mostrados para a Visão.
No War Multiplayer temos essa arquiterura separada em duas partes:
Servidor e Cliente. Onde o servidor é um único processo reponsável por
centralizar os dados do sistema, aplicar as devidas regras a esses
dados e enviar as informações necessárias ao clientes conectados. O
cliente é um processo rodando em um navegador de internet.
As camadas da aplicação podem ser divididas da seguinte maneira:
* Servidor
** Modelo:
** Controle:
* Cliente
** Controle:
** Visão:
Classes no lado servidor
========================
A biblioteca Rack::Websocket precisa de uma classe herdada de *Rack::Websocket::Application*.
Essa classe é o ponto de entrada e saída do servidor. É ela que recebe os dados e envia
respostas aos clientes, é ela que é chamada nos eventos de nova conexão (on_open) e conexão
fechada (on_close)
********************
* ServerConnection *
********************
No War Multiplayer, a classe filha de *Rack::Websocket::Application* é a *ServerConnection*
Cada cliente conectado ao servidor é 'representado' durante toda a duração da conexão por
uma instancia de *ServerConnection*.
- Ao receber uma mensagem (on_message)
* Trasnforma a string JSON em um objeto Hash
* Encaminha o hash para o objeto da aplicação (Application)
- Ao enviar uma mensagem (send_message)
* Transforma o objeto hash em JSON
* Envia ao cliente
- Eventos (on_open, on_close)
* Encaminhados ao objeto da aplicacao
***************
* Application *
***************
A classe Application faz a ponte entre os controladores e as instancias ServerConnection
(que representam os clientes).
Ela mantem uma lista de todos os controladores instanciados, e todas as ServerConnection
instanciadas. Ao receber uma mensagem de um determinado cliente ela dispacha essa mensagem
ao controlador responsavel por ela
- Eventos (on_open, on_close)
* Procura entre os objetos controladores, quais deles implementam os métodos on_open e
on_close
* Aciona o(s) controlador(es), caso exista, chamando o método em questão
-