Added /quit, the server IRC client gets cleaned up properly when quitting, pulled command handling out into a separate file

This commit is contained in:
khlieng 2015-02-09 01:00:30 +01:00
parent d11aa3ff4e
commit 99ef788906
8 changed files with 83 additions and 49 deletions

View file

@ -7,7 +7,8 @@ var messageActions = Reflux.createActions([
'send',
'add',
'broadcast',
'inform'
'inform',
'command'
]);
messageActions.send.preEmit = function(message, to, server) {

View file

@ -4,6 +4,7 @@ var Route = Router.Route;
var DefaultRoute = Router.DefaultRoute;
require('./irc');
require('./command');
var socket = require('./socket');
var util = require('./util');
var App = require('./components/App.jsx');

49
client/src/js/command.js Normal file
View file

@ -0,0 +1,49 @@
var channelStore = require('./stores/channel');
var channelActions = require('./actions/channel');
var messageActions = require('./actions/message');
var serverActions = require('./actions/server');
var tabActions = require('./actions/tab');
messageActions.command.listen(function(cmd, channel, server) {
var params = cmd.slice(1).split(' ');
switch (params[0].toLowerCase()) {
case 'nick':
if (params[1]) {
serverActions.setNick(params[1], server);
}
break;
case 'quit':
serverActions.disconnect(server);
break;
case 'join':
if (params[1]) {
channelActions.join([params[1]], server);
tabActions.select(server, params[1]);
}
break;
case 'part':
if (channel) {
channelActions.part([channel], server);
}
break;
case 'me':
if (params.length > 1) {
messageActions.send('\x01ACTION ' + params.slice(1).join(' ') + '\x01', channel, server);
}
break;
case 'topic':
var topic = channelStore.getTopic(server, channel);
if (topic) {
messageActions.inform(topic, server, channel);
} else {
messageActions.inform('No topic set', server, channel);
}
break;
}
});

View file

@ -1,53 +1,10 @@
var React = require('react');
var Reflux = require('reflux');
var channelStore = require('../stores/channel');
var selectedTabStore = require('../stores/selectedTab');
var messageActions = require('../actions/message');
var channelActions = require('../actions/channel');
var serverActions = require('../actions/server');
var tabActions = require('../actions/tab');
function dispatchCommand(cmd, channel, server) {
var params = cmd.slice(1).split(' ');
switch (params[0].toLowerCase()) {
case 'join':
if (params[1]) {
channelActions.join([params[1]], server);
tabActions.select(server, params[1]);
}
break;
case 'part':
if (channel) {
channelActions.part([channel], server);
}
break;
case 'me':
if (params.length > 1) {
messageActions.send('\x01ACTION ' + params.slice(1).join(' ') + '\x01', channel, server);
}
break;
case 'topic':
var topic = channelStore.getTopic(server, channel);
if (topic) {
messageActions.inform(topic, server, channel);
} else {
messageActions.inform('No topic set', server, channel);
}
break;
case 'nick':
if (params[1]) {
serverActions.setNick(params[1], server);
}
break;
}
}
var MessageInput = React.createClass({
mixins: [
Reflux.connect(selectedTabStore, 'selectedTab')
@ -64,7 +21,7 @@ var MessageInput = React.createClass({
var tab = this.state.selectedTab;
if (e.target.value[0] === '/') {
dispatchCommand(e.target.value, tab.channel, tab.server);
messageActions.command(e.target.value, tab.channel, tab.server);
} else {
messageActions.send(e.target.value, tab.channel, tab.server);
}

View file

@ -82,6 +82,7 @@ var channelStore = Reflux.createStore({
init: function() {
this.listenToMany(actions);
this.listenTo(serverActions.connect, 'addServer');
this.listenTo(serverActions.disconnect, 'removeServer');
this.listenTo(serverActions.load, 'loadServers');
},
@ -185,6 +186,11 @@ var channelStore = Reflux.createStore({
}
},
removeServer: function(server) {
delete channels[server];
this.trigger(channels);
},
loadServers: function(storedServers) {
_.each(storedServers, function(server) {
if (!(server.address in channels)) {

View file

@ -28,6 +28,11 @@ var serverStore = Reflux.createStore({
tabActions.select(server);
},
disconnect: function(server) {
delete servers[server];
this.trigger(servers);
},
setNick: function(nick, server) {
servers[server].nick = nick;
this.trigger(servers);