Cleaned up action naming and handling

This commit is contained in:
khlieng 2015-01-22 00:14:28 +01:00
parent e1cb8c468d
commit 43a725c662
9 changed files with 129 additions and 139 deletions

View File

@ -1,47 +1,54 @@
var Reflux = require('reflux'); var Reflux = require('reflux');
var _ = require('lodash');
var sock = require('../socket.js')('/ws'); var socket = require('../socket.js');
var channelActions = Reflux.createActions([ var channelActions = Reflux.createActions([
'join', 'join',
'joined',
'part', 'part',
'parted', 'addUser',
'quit', 'removeUser',
'removeUserAll',
'setUsers', 'setUsers',
'setTopic', 'setTopic',
'load' 'load'
]); ]);
channelActions.join.preEmit = function(data) { channelActions.join.preEmit = function(channels, server) {
sock.send('join', data); socket.send('join', {
server: server,
channels: channels
});
}; };
channelActions.part.preEmit = function(data) { channelActions.part.preEmit = function(channels, server) {
sock.send('part', data); socket.send('part', {
server: server,
channels: channels
});
}; };
sock.on('join', function(data) { socket.on('join', function(data) {
channelActions.joined(data.user, data.server, data.channels[0]); channelActions.addUser(data.user, data.server, data.channels[0]);
}); });
sock.on('part', function(data) { socket.on('part', function(data) {
channelActions.parted(data.user, data.server, data.channels[0]); channelActions.removeUser(data.user, data.server, data.channels[0]);
}); });
sock.on('quit', function(data) { socket.on('quit', function(data) {
channelActions.quit(data.user, data.server); channelActions.removeUserAll(data.user, data.server);
}); });
sock.on('users', function(data) { socket.on('users', function(data) {
channelActions.setUsers(data.users, data.server, data.channel); channelActions.setUsers(data.users, data.server, data.channel);
}); });
sock.on('topic', function(data) { socket.on('topic', function(data) {
channelActions.setTopic(data.topic, data.server, data.channel); channelActions.setTopic(data.topic, data.server, data.channel);
}); });
sock.on('channels', function(data) { socket.on('channels', function(data) {
channelActions.load(data); channelActions.load(data);
}); });

View File

@ -1,19 +1,57 @@
var Reflux = require('reflux'); var Reflux = require('reflux');
var sock = require('../socket.js')('/ws'); var socket = require('../socket.js');
var messageActions = Reflux.createActions([ var messageActions = Reflux.createActions([
'send', 'send',
'add', 'add'
'selectTab'
]); ]);
messageActions.send.preEmit = function(message, to, server) { messageActions.send.preEmit = function(message, to, server) {
sock.send('chat', { socket.send('chat', {
server: server, server: server,
to: to, to: to,
message: message message: message
}); });
}; };
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,
from: '',
to: data.channels[0],
message: data.user + ' joined the channel',
type: 'info'
});
});
socket.on('part', function(data) {
messageActions.add({
server: data.server,
from: '',
to: data.channels[0],
message: data.user + ' left the channel',
type: 'info'
});
});
socket.on('motd', function(data) {
_.each(data.content.split('\n'), function(line) {
messageActions.add({
server: data.server,
from: '',
to: data.server,
message: line
});
});
});
module.exports = messageActions; module.exports = messageActions;

View File

@ -1,14 +1,22 @@
var Reflux = require('reflux'); var Reflux = require('reflux');
var sock = require('../socket.js')('/ws'); var socket = require('../socket.js')('/ws');
var serverActions = Reflux.createActions([ var serverActions = Reflux.createActions([
'connect', 'connect',
'disconnect' 'disconnect'
]); ]);
serverActions.connect.preEmit = function(data) { serverActions.connect.preEmit = function(server, nick, username) {
sock.send('connect', data); socket.send('connect', {
server: server,
nick: nick,
username: username
});
};
serverActions.disconnect.preEmit = function(server) {
socket.send('quit', { server: server });
}; };
module.exports = serverActions; module.exports = serverActions;

View File

@ -1,70 +1,21 @@
var React = require('react'); var React = require('react');
var _ = require('lodash');
var sock = require('./socket')('/ws'); var socket = require('./socket');
var util = require('./util'); var util = require('./util');
var App = require('./components/App.jsx'); var App = require('./components/App.jsx');
var messageActions = require('./actions/message.js');
var tabActions = require('./actions/tab.js'); var tabActions = require('./actions/tab.js');
var serverActions = require('./actions/server.js'); var serverActions = require('./actions/server.js');
var channelActions = require('./actions/channel.js'); var channelActions = require('./actions/channel.js');
React.render(<App />, document.body);
var uuid = localStorage.uuid || (localStorage.uuid = util.UUID()); var uuid = localStorage.uuid || (localStorage.uuid = util.UUID());
var nick = 'test' + Math.floor(Math.random() * 99999);
tabActions.select('irc.freenode.net'); socket.on('connect', function() {
socket.send('uuid', uuid);
sock.on('connect', function() { serverActions.connect('irc.freenode.net', nick, 'username');
sock.send('uuid', uuid); channelActions.join(['#stuff'], 'irc.freenode.net');
tabActions.select('irc.freenode.net');
serverActions.connect({
server: 'irc.freenode.net',
nick: 'test' + Math.floor(Math.random() * 99999),
username: 'user'
});
channelActions.join({
server: 'irc.freenode.net',
channels: [ '#stuff' ]
});
}); });
channelActions.joined.listen(function(user, server, channel) { React.render(<App />, document.body);
messageActions.add({
server: server,
from: '',
to: channel,
message: user + ' joined the channel',
type: 'info'
});
});
channelActions.parted.listen(function(user, server, channel) {
messageActions.add({
server: server,
from: '',
to: channel,
message: user + ' left the channel',
type: 'info'
});
});
sock.on('message', function(data) {
messageActions.add(data);
});
sock.on('pm', function(data) {
messageActions.add(data);
});
sock.on('motd', function(data) {
_.each(data.content.split('\n'), function(line) {
messageActions.add({
server: data.server,
from: '',
to: data.server,
message: line
});
});
});

View File

@ -11,19 +11,13 @@ function dispatchCommand(cmd, channel, server) {
switch (params[0].toLowerCase()) { switch (params[0].toLowerCase()) {
case 'join': case 'join':
if (params[1]) { if (params[1]) {
channelActions.join({ channelActions.join(params[1], server);
server: server,
channels: [params[1]]
});
} }
break; break;
case 'part': case 'part':
if (channel) { if (channel) {
channelActions.part({ channelActions.part([channel], server);
server: server,
channels: [channel]
});
} }
break; break;
} }

View File

@ -2,40 +2,28 @@ var EventEmitter = require('events').EventEmitter;
var _ = require('lodash'); var _ = require('lodash');
var sockets = {}; var socket = {
send: function(type, data) {
function createSocket(path) { ws.send(JSON.stringify({ type: type, request: data }));
if (sockets[path]) {
return sockets[path];
} else {
var ws = new WebSocket('ws://' + window.location.host + path);
var sock = {
send: function(type, data) {
ws.send(JSON.stringify({ type: type, request: data }));
}
};
_.extend(sock, EventEmitter.prototype);
sockets[path] = sock;
ws.onopen = function() {
sock.emit('connect');
};
ws.onclose = function() {
sock.emit('disconnect');
};
ws.onmessage = function(e) {
var msg = JSON.parse(e.data);
sock.emit(msg.type, msg.response);
};
return sock;
} }
} };
module.exports = createSocket; _.extend(socket, EventEmitter.prototype);
var ws = new WebSocket('ws://' + window.location.host + '/ws');
ws.onopen = function() {
socket.emit('connect');
};
ws.onclose = function() {
socket.emit('disconnect');
};
ws.onmessage = function(e) {
var msg = JSON.parse(e.data);
socket.emit(msg.type, msg.response);
};
module.exports = socket;

View File

@ -19,25 +19,25 @@ var channelStore = Reflux.createStore({
this.listenToMany(actions); this.listenToMany(actions);
}, },
joined: function(user, server, channel) { part: function(partChannels, server) {
_.each(partChannels, function(channel) {
delete channels[server][channel];
});
this.trigger(channels);
},
addUser: function(user, server, channel) {
initChannel(server, channel); initChannel(server, channel);
channels[server][channel].users.push(user); channels[server][channel].users.push(user);
this.trigger(channels); this.trigger(channels);
}, },
part: function(data) { removeUser: function(user, server, channel) {
_.each(data.channels, function(channel) {
delete channels[data.server][channel];
});
this.trigger(channels);
},
parted: function(user, server, channel) {
_.pull(channels[server][channel].users, user); _.pull(channels[server][channel].users, user);
this.trigger(channels); this.trigger(channels);
}, },
quit: function(user, server) { removeUserAll: function(user, server) {
_.each(channels[server], function(channel) { _.each(channels[server], function(channel) {
_.pull(channel.users, user); _.pull(channel.users, user);
}); });

View File

@ -18,10 +18,10 @@ var selectedTabStore = Reflux.createStore({
this.trigger(selectedTab); this.trigger(selectedTab);
}, },
part: function(data) { part: function(channels, server) {
var self = this; var self = this;
if (data.server === selectedTab.server) { if (server === selectedTab.server) {
_.each(data.channels, function(channel) { _.each(channels, function(channel) {
if (channel === selectedTab.channel) { if (channel === selectedTab.channel) {
delete selectedTab.channel; delete selectedTab.channel;
self.trigger(selectedTab); self.trigger(selectedTab);

View File

@ -9,8 +9,12 @@ var serverStore = Reflux.createStore({
this.listenToMany(actions); this.listenToMany(actions);
}, },
connect: function(data) { connect: function(server, nick, username) {
servers[data.server] = data; servers[server] = {
server: server,
nick: nick,
username: username
};
this.trigger(servers); this.trigger(servers);
}, },