Skip to content

Instantly share code, notes, and snippets.

@pathsny
Created May 4, 2013 03:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pathsny/5515991 to your computer and use it in GitHub Desktop.
Save pathsny/5515991 to your computer and use it in GitHub Desktop.
peeps = {}
net = require('net');
_ = require('underscore');
key = (socket) ->
"#{socket.remoteAddress}:#{socket.remotePort}"
del = (socket) ->
delete peeps[key(socket)]
console.log('deleted', key(socket), peeps);
add = (socket) ->
peeps[key(socket)] = {socket: socket}
console.log('added', key(socket), peeps)
broadcast = (something, except) ->
_(peeps).
chain().
keys().
without(except).
each (addr) ->
peeps[addr].socket.write(something)
Commands = {
nick: (socket, data) ->
peeps[key(socket)]['nick'] = data
console.log('peeps', peeps)
paused: (socket, data) ->
console.log "#{peeps[key(socket)]['nick']} paused"
broadcast 'paused:'
playing: (socket, data) ->
console.log "#{peeps[key(socket)]['nick']} playing"
broadcast 'playing:'
text: (socket, data) ->
nick = peeps[key(socket)]['nick']
return unless nick
outtext = data.length < 100 ? data : "#{data.sustr(0,96)}..."
output = "text:#{nick} : #{data}"
console.log(output)
_(peeps).
chain().
keys().
# without(key(socket)).
each (addr) ->
peeps[addr].socket.write('text:' + nick + ' : ' + data)
}
process = (socket, line) ->
stuff = line.match(/^([^:]*):(.*)/)
return unless stuff
try
Commands[stuff[1]] socket, stuff[2]
catch error
console.log "error calling " + stuff[1] + " with " + stuff[2]
server = net.createServer (s) ->
add(s)
s.on 'data', (d) ->
_(d.toString().split("\n")).each (line) ->
process s, line
s.on 'error', del
s.on 'end', del
server.listen(1378, '0.0.0.0')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment