Skip to content

Commit 6b578a0

Browse files
Add files via upload
0 parents  commit 6b578a0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+11980
-0
lines changed

lib/chat_rpg.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var tamanhoDado,
2+
numeroDado;
3+
4+
exports.jogarDados = function(socket, salaAtual, nomes){
5+
socket.on('rolarDado', function(dado){
6+
numeroDado = Math.floor((Math.random() * dado)+ 1);
7+
if ( numeroDado ) {
8+
socket.broadcast.to(salaAtual[socket.id]).emit('mensagem', {
9+
texto: nomes[socket.id] + " rolou um dado d" + dado +
10+
" e tirou o número " + numeroDado + "."}
11+
)
12+
socket.emit('mensagem', {
13+
texto: "Você rolou um dado d" + dado +
14+
" e tirou o número " + numeroDado + "."}
15+
)} else {
16+
socket.emit('mensagem', {
17+
texto: "O número de lados deve ser um número inteiro!"
18+
})
19+
};
20+
console.log(nomes[socket.id] + "rolou um dado d" + dado +
21+
" e tirou o número " + numeroDado + ".");
22+
});
23+
};

lib/chat_server.js

+188
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
var socketio = require('socket.io'),
2+
chatRPG = require('./chat_rpg'),
3+
chatUNO = require('./chat_uno'),
4+
io,
5+
numVisitante = 1,
6+
nomes = {},
7+
nomesUsados = [],
8+
salaAtual = {};
9+
10+
11+
// Conecta o Sockets.IO ao servidor HTTP e exporta a função.
12+
exports.conectar = function(servidor){
13+
chatUNO.escolherCarta(7);
14+
// Registra a conexão.
15+
io = socketio.listen(servidor);
16+
//io.set('log level', 1);
17+
18+
// Define como cada conexão irá ser gerenciada.
19+
io.sockets.on('connect', function(socket) {
20+
console.log("Usuário entrou");
21+
// Quando alguém entrar, um nome será dado. Vide função.
22+
numVisitante = nomearVisitante(socket, numVisitante, nomes, nomesUsados);
23+
//Faz com que o novo convidado entre na sala principal.
24+
entrarNaSala(socket, 'Principal');
25+
26+
// Nomes explicativos.
27+
lidarComMensagens(socket, nomes);
28+
lidarComTentativasDeMudancaDeNome(socket, nomes, nomesUsados);
29+
lidarEntradaDeSala(socket);
30+
chatRPG.jogarDados(socket,salaAtual, nomes);
31+
32+
// Lista salas caso o usuário peça.
33+
socket.on('rooms', function(){
34+
socket.emit('salas', io.sockets.manager.rooms);
35+
});
36+
37+
// Nome explicativo.
38+
lidarComVisitanteDesconectado(socket, nomes, nomesUsados);
39+
});
40+
};
41+
42+
// Nome explicativo.
43+
function nomearVisitante( socket, numVisitante, nomes, nomesUsados) {
44+
// Dá ao novo convidado um nome.
45+
var nome = 'Convidado' + numVisitante;
46+
// Registra o nome no vetor.
47+
nomes[socket.id] = nome;
48+
// Avisa ao usuário o seu nome.
49+
socket.emit('nomeResultante', {
50+
sucesso : true,
51+
nome : nome
52+
});
53+
// Registra o nome no vetor de nomes usados.
54+
nomesUsados.push(nome);
55+
// Incrementa o número de visitas.
56+
return numVisitante + 1;
57+
};
58+
59+
// Nome explicativo
60+
function entrarNaSala(socket, sala) {
61+
// Faz com que o usuário entre na sala em questão.
62+
socket.join(sala);
63+
// Recebe que o usuário em questão está em tal sala.
64+
salaAtual[socket.id] = sala;
65+
// Avisa ao usuário em questão que ele está em tal sala.
66+
socket.emit('resultadoEntrada', {sala : sala});
67+
// Avisa aos outros usuários que tal usuário entrou.
68+
socket.broadcast.to(sala).emit('mensagem', {
69+
texto: nomes[socket.id] + ' entrou na sala ' + sala + '.'
70+
});
71+
console.log(nomes[socket.id] + ' entrou na sala ' + sala + '.');
72+
73+
/* Determina quais outros usuários estão na mesma sala.
74+
* que o usuário.
75+
*/
76+
/*
77+
var usuariosNaSala = nomes;
78+
console.log(usuariosNaSala);
79+
// Se outros usuários existem, sumarize quem são.
80+
if ( usuariosNaSala.length > 1 ) {
81+
// console.log(nomesUsados[0].id);
82+
var usuariosNaSalaSumario = 'Usuários conectados na sala: ';
83+
for ( var indice; indice > usuariosNaSala; indice++ ) {
84+
var idSocketUsuario = nomesUsados[indice].id;
85+
86+
if ( idSocketUsuario != socket.id ) {
87+
if (indice > 0 ) {
88+
usuariosNaSalaSumario += ', ';
89+
};
90+
usuariosNaSalaSumario += nomes[idSocketUsuario];
91+
};
92+
};
93+
usuariosNaSalaSumario += ".";
94+
console.log(usuariosNaSalaSumario);
95+
// Envia o sumário de usuários totais na sala para o usuário.
96+
socket.emit('mensagem', {texto: usuariosNaSalaSumario});
97+
};*/
98+
};
99+
100+
101+
// Nome explicativo.
102+
function lidarComTentativasDeMudancaDeNome(socket, nomes, nomesUsados){
103+
// Adiciona um listener para tentativas de mudança de nome.
104+
socket.on('tentativaNome', function(nome) {
105+
// Proíbe nomes que começam com "Convidado".
106+
107+
if ( nome.indexOf('Convidado') == 0) {
108+
socket.emit('nomeResultante', {
109+
sucesso: false,
110+
mensagem: 'Nomes não podem começar com "Convidado."'
111+
});
112+
} else {
113+
// Se o nome não existe, ele passará a exitir.
114+
if ( nomesUsados.indexOf(nome) == -1 ){
115+
var nomeAnterior = nomes[socket.id];
116+
var indiceNomeAnterior = nomesUsados.indexOf(nomeAnterior);
117+
nomesUsados.push(nome);
118+
nomes[socket.id] = nome;
119+
// Deleta o nome antigo da lista de nomes.
120+
delete nomesUsados[indiceNomeAnterior];
121+
socket.emit('nomeResultante', {
122+
sucesso: true,
123+
nome: nome
124+
});
125+
socket.broadcast.to(salaAtual[socket.id]).emit('mensagem', {
126+
texto: nomeAnterior + ' agora é ' + nome + '.'
127+
});
128+
} else {
129+
// Se o nome já estiver sendo usado, avisará ao usuário.
130+
socket.emit('nomeResultante', {
131+
sucesso : false,
132+
mensagem: 'Esse nome já está em uso!'
133+
});
134+
};
135+
};
136+
});
137+
};
138+
139+
// Nome explicativo
140+
function lidarComMensagens(socket){
141+
// Ao receber uma mensagem, a mesma será enviada para toda a sala.
142+
socket.on('mensagem', function(mensagem){
143+
socket.broadcast.to(mensagem.sala).emit('mensagem', {
144+
autor: nomes[socket.id],
145+
texto: mensagem.texto
146+
});
147+
console.log(nomes[socket.id] + ': ' + mensagem.texto +
148+
" na sala " + mensagem.sala + ".");
149+
});
150+
};
151+
152+
// Nome explicativo
153+
function lidarEntradaDeSala(socket){
154+
socket.on('entrar', function(sala) {
155+
var nomeSala = sala.novaSala.split(' ');
156+
var nomeSalaNovo = nomeSala[0].substring(0,3).toLowerCase();
157+
if (nomeSalaNovo == "rpg"){
158+
socket.broadcast.to(salaAtual[socket.id]).emit('mensagem', {
159+
texto: nomes[socket.id] + ' foi para a sala "' + sala.novaSala + '" jogar RPG.'
160+
});
161+
socket.emit('mensagem', {
162+
texto: "Bem vindo(a) a uma sala de RPG! Você pode rolar um dado ao clicar no botão lá embaixo"
163+
});
164+
};
165+
socket.leave(salaAtual[socket.id]);
166+
entrarNaSala(socket, sala.novaSala);
167+
});
168+
};
169+
170+
// Nome explicativo
171+
function lidarComVisitanteDesconectado(socket) {
172+
socket.on('disconnect', function() {
173+
socket.broadcast.to(salaAtual[socket.id]).emit('mensagem', {
174+
texto: nomes[socket.id] + " desconectou."
175+
});
176+
socket.emit('mensagem', {
177+
texto: "Você foi desconectado."
178+
});
179+
var nomeIndice = nomesUsados.indexOf(nomes[socket.id]);
180+
// Remove o nome da lista de nomes usados
181+
delete nomesUsados[nomeIndice];
182+
// Remove o nome do usuário da lista de usuários
183+
delete nomes[socket.id];
184+
});
185+
};
186+
187+
//function lidarComUno(socket)
188+

lib/chat_uno.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
var contagemCarta = 0,
2+
carta = 0,
3+
posicaoCarta = 0,
4+
cartas = [],
5+
numeroCarta = 0,
6+
corCarta = 0,
7+
coresCarta = ['vermelho', 'amarelo', 'verde', 'azul'],
8+
espCarta = ['+4', 'ec'],
9+
tipoCarta = "",
10+
qualEsp = "";
11+
12+
exports.escolherCarta = function (numeroVezes) {
13+
for (contagemCarta = 0; contagemCarta < numeroVezes; contagemCarta++) {
14+
numeroCarta = Math.floor((Math.random() * 15) + 1);
15+
console.log("Numero da carta geral:" + numeroCarta);
16+
if (numeroCarta == 15) {
17+
qualEsp = espCarta[0];
18+
tipoCarta = "especial";
19+
} else if (numeroCarta == 14) {
20+
qualEsp = espCarta[1];
21+
tipoCarta = "especial";
22+
} else {
23+
tipoCarta = "normal";
24+
corCarta = Math.floor((Math.random() * 4));
25+
console.log("Cor da carta:" + coresCarta[corCarta]);
26+
}
27+
if (tipoCarta == "normal") {
28+
cartas[contagemCarta] = {
29+
posicaoCarta: posicaoCarta++,
30+
tipoCarta: tipoCarta,
31+
numeroCarta: numeroCarta,
32+
corCarta: coresCarta[corCarta],
33+
}
34+
} else if (tipoCarta == "especial") {
35+
cartas[contagemCarta] = {
36+
posicaoCarta: posicaoCarta++,
37+
tipoCarta: tipoCarta,
38+
qualEsp: qualEsp
39+
}
40+
}
41+
}
42+
console.log(cartas);
43+
};
44+

0 commit comments

Comments
 (0)