Moved websocket handling on the client into its own file, added reason to part and quit messages, global system messages about a user now only gets sent to channels where the user is/was
This commit is contained in:
parent
3f335187c0
commit
736ef76bc0
@ -30,36 +30,4 @@ channelActions.part.preEmit = function(channels, server) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.on('join', function(data) {
|
|
||||||
channelActions.addUser(data.user, data.server, data.channels[0]);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('part', function(data) {
|
|
||||||
channelActions.removeUser(data.user, data.server, data.channels[0]);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('quit', function(data) {
|
|
||||||
channelActions.removeUserAll(data.user, data.server);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('nick', function(data) {
|
|
||||||
channelActions.renameUser(data.old, data.new, data.server);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('users', function(data) {
|
|
||||||
channelActions.setUsers(data.users, data.server, data.channel);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('topic', function(data) {
|
|
||||||
channelActions.setTopic(data.topic, data.server, data.channel);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('mode', function(data) {
|
|
||||||
channelActions.setMode(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('channels', function(data) {
|
|
||||||
channelActions.load(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = channelActions;
|
module.exports = channelActions;
|
@ -6,7 +6,8 @@ var socket = require('../socket');
|
|||||||
var messageActions = Reflux.createActions([
|
var messageActions = Reflux.createActions([
|
||||||
'send',
|
'send',
|
||||||
'add',
|
'add',
|
||||||
'broadcast'
|
'broadcast',
|
||||||
|
'inform'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
messageActions.send.preEmit = function(message, to, server) {
|
messageActions.send.preEmit = function(message, to, server) {
|
||||||
@ -17,48 +18,4 @@ messageActions.send.preEmit = function(message, to, server) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.on('message', function(data) {
|
|
||||||
messageActions.add(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('pm', function(data) {
|
|
||||||
messageActions.add(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('join', function(data) {
|
|
||||||
messageActions.add({
|
|
||||||
server: data.server,
|
|
||||||
to: data.channels[0],
|
|
||||||
message: data.user + ' joined the channel',
|
|
||||||
type: 'info'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('part', function(data) {
|
|
||||||
messageActions.add({
|
|
||||||
server: data.server,
|
|
||||||
to: data.channels[0],
|
|
||||||
message: data.user + ' left the channel',
|
|
||||||
type: 'info'
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('quit', function(data) {
|
|
||||||
messageActions.broadcast(data.user + ' quit', data.server);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('nick', function(data) {
|
|
||||||
messageActions.broadcast(data.old + ' changed nick to ' + data.new, data.server);
|
|
||||||
});
|
|
||||||
|
|
||||||
socket.on('motd', function(data) {
|
|
||||||
_.each(data.content.split('\n'), function(line) {
|
|
||||||
messageActions.add({
|
|
||||||
server: data.server,
|
|
||||||
to: data.server,
|
|
||||||
message: line
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = messageActions;
|
module.exports = messageActions;
|
@ -21,8 +21,4 @@ serverActions.disconnect.preEmit = function(server) {
|
|||||||
socket.send('quit', { server: server });
|
socket.send('quit', { server: server });
|
||||||
};
|
};
|
||||||
|
|
||||||
socket.on('servers', function(data) {
|
|
||||||
serverActions.load(data);
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = serverActions;
|
module.exports = serverActions;
|
@ -1,5 +1,6 @@
|
|||||||
var React = require('react');
|
var React = require('react');
|
||||||
|
|
||||||
|
require('./irc');
|
||||||
var socket = require('./socket');
|
var socket = require('./socket');
|
||||||
var util = require('./util');
|
var util = require('./util');
|
||||||
var App = require('./components/App.jsx');
|
var App = require('./components/App.jsx');
|
||||||
|
68
client/src/js/irc.js
Normal file
68
client/src/js/irc.js
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
|
var socket = require('./socket');
|
||||||
|
var channelActions = require('./actions/channel');
|
||||||
|
var messageActions = require('./actions/message');
|
||||||
|
var serverActions = require('./actions/server');
|
||||||
|
|
||||||
|
socket.on('join', function(data) {
|
||||||
|
channelActions.addUser(data.user, data.server, data.channels[0]);
|
||||||
|
messageActions.inform(data.user + ' joined the channel', data.server, data.channels[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('part', function(data) {
|
||||||
|
channelActions.removeUser(data.user, data.server, data.channels[0]);
|
||||||
|
messageActions.inform(withReason(data.user + ' left the channel', data.reason), data.server, data.channels[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('quit', function(data) {
|
||||||
|
messageActions.broadcast(withReason(data.user + ' quit', data.reason), data.server, data.user);
|
||||||
|
channelActions.removeUserAll(data.user, data.server);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('nick', function(data) {
|
||||||
|
messageActions.broadcast(data.old + ' changed nick to ' + data.new, data.server, data.old);
|
||||||
|
channelActions.renameUser(data.old, data.new, data.server);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('message', function(data) {
|
||||||
|
messageActions.add(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('pm', function(data) {
|
||||||
|
messageActions.add(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('motd', function(data) {
|
||||||
|
_.each(data.content.split('\n'), function(line) {
|
||||||
|
messageActions.add({
|
||||||
|
server: data.server,
|
||||||
|
to: data.server,
|
||||||
|
message: line
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('users', function(data) {
|
||||||
|
channelActions.setUsers(data.users, data.server, data.channel);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('topic', function(data) {
|
||||||
|
channelActions.setTopic(data.topic, data.server, data.channel);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('mode', function(data) {
|
||||||
|
channelActions.setMode(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('servers', function(data) {
|
||||||
|
serverActions.load(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on('channels', function(data) {
|
||||||
|
channelActions.load(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
function withReason(message, reason) {
|
||||||
|
return message + (reason ? ' (' + reason + ')' : '');
|
||||||
|
}
|
@ -8,6 +8,8 @@ var actions = require('../actions/message');
|
|||||||
var messages = {};
|
var messages = {};
|
||||||
|
|
||||||
function addMessage(message, dest) {
|
function addMessage(message, dest) {
|
||||||
|
message.time = new Date();
|
||||||
|
|
||||||
if (!(message.server in messages)) {
|
if (!(message.server in messages)) {
|
||||||
messages[message.server] = {};
|
messages[message.server] = {};
|
||||||
messages[message.server][dest] = [message];
|
messages[message.server][dest] = [message];
|
||||||
@ -28,8 +30,7 @@ var messageStore = Reflux.createStore({
|
|||||||
server: server,
|
server: server,
|
||||||
from: serverStore.getNick(server),
|
from: serverStore.getNick(server),
|
||||||
to: to,
|
to: to,
|
||||||
message: message,
|
message: message
|
||||||
time: new Date()
|
|
||||||
}, to);
|
}, to);
|
||||||
|
|
||||||
this.trigger(messages);
|
this.trigger(messages);
|
||||||
@ -41,25 +42,34 @@ var messageStore = Reflux.createStore({
|
|||||||
dest = message.server;
|
dest = message.server;
|
||||||
}
|
}
|
||||||
|
|
||||||
message.time = new Date();
|
|
||||||
|
|
||||||
addMessage(message, dest);
|
addMessage(message, dest);
|
||||||
this.trigger(messages);
|
this.trigger(messages);
|
||||||
},
|
},
|
||||||
|
|
||||||
broadcast: function(message, server) {
|
broadcast: function(message, server, user) {
|
||||||
_.each(channelStore.getChannels(server), function(channel, channelName) {
|
_.each(channelStore.getChannels(server), function(channel, channelName) {
|
||||||
addMessage({
|
if (!user || (user && _.find(channel.users, { nick: user }))) {
|
||||||
server: server,
|
addMessage({
|
||||||
to: channelName,
|
server: server,
|
||||||
message: message,
|
to: channelName,
|
||||||
type: 'info',
|
message: message,
|
||||||
time: new Date()
|
type: 'info'
|
||||||
}, channelName);
|
}, channelName);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
this.trigger(messages);
|
this.trigger(messages);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
inform: function(message, server, channel) {
|
||||||
|
addMessage({
|
||||||
|
server: server,
|
||||||
|
to: channel,
|
||||||
|
message: message,
|
||||||
|
type: 'info'
|
||||||
|
}, channel);
|
||||||
|
this.trigger(messages);
|
||||||
|
},
|
||||||
|
|
||||||
getState: function() {
|
getState: function() {
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,11 @@ type Join struct {
|
|||||||
Channels []string `json:"channels"`
|
Channels []string `json:"channels"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Part struct {
|
||||||
|
Join
|
||||||
|
Reason string `json:"reason,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type Mode struct {
|
type Mode struct {
|
||||||
Server string `json:"server"`
|
Server string `json:"server"`
|
||||||
Channel string `json:"channel"`
|
Channel string `json:"channel"`
|
||||||
@ -44,6 +49,7 @@ type Mode struct {
|
|||||||
type Quit struct {
|
type Quit struct {
|
||||||
Server string `json:"server"`
|
Server string `json:"server"`
|
||||||
User string `json:"user"`
|
User string `json:"user"`
|
||||||
|
Reason string `json:"reason,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Chat struct {
|
type Chat struct {
|
||||||
|
@ -16,8 +16,6 @@ func handleMessages(irc *IRC, session *Session) {
|
|||||||
for msg := range irc.Messages {
|
for msg := range irc.Messages {
|
||||||
switch msg.Command {
|
switch msg.Command {
|
||||||
case NICK:
|
case NICK:
|
||||||
printMessage(msg, irc)
|
|
||||||
|
|
||||||
session.sendJSON("nick", Nick{
|
session.sendJSON("nick", Nick{
|
||||||
Server: irc.Host,
|
Server: irc.Host,
|
||||||
Old: msg.Prefix,
|
Old: msg.Prefix,
|
||||||
@ -47,10 +45,13 @@ func handleMessages(irc *IRC, session *Session) {
|
|||||||
case PART:
|
case PART:
|
||||||
user := msg.Prefix
|
user := msg.Prefix
|
||||||
|
|
||||||
session.sendJSON("part", Join{
|
session.sendJSON("part", Part{
|
||||||
Server: irc.Host,
|
Join: Join{
|
||||||
User: user,
|
Server: irc.Host,
|
||||||
Channels: msg.Params,
|
User: user,
|
||||||
|
Channels: msg.Params,
|
||||||
|
},
|
||||||
|
Reason: msg.Trailing,
|
||||||
})
|
})
|
||||||
|
|
||||||
channelStore.RemoveUser(user, irc.Host, msg.Params[0])
|
channelStore.RemoveUser(user, irc.Host, msg.Params[0])
|
||||||
@ -94,6 +95,7 @@ func handleMessages(irc *IRC, session *Session) {
|
|||||||
session.sendJSON("quit", Quit{
|
session.sendJSON("quit", Quit{
|
||||||
Server: irc.Host,
|
Server: irc.Host,
|
||||||
User: user,
|
User: user,
|
||||||
|
Reason: msg.Trailing,
|
||||||
})
|
})
|
||||||
|
|
||||||
channelStore.RemoveUserAll(user, irc.Host)
|
channelStore.RemoveUserAll(user, irc.Host)
|
||||||
|
@ -104,7 +104,7 @@ func handleWS(ws *websocket.Conn) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
case "part":
|
case "part":
|
||||||
var data Join
|
var data Part
|
||||||
|
|
||||||
json.Unmarshal(req.Request, &data)
|
json.Unmarshal(req.Request, &data)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user