UNPKG

3.6 kBtext/coffeescriptView Raw
1{EventEmitter} = require 'events'
2engineServer = require 'engine.io'
3
4class Server extends EventEmitter
5 constructor: (@httpServer, @options={}) ->
6 @options.path ?= "/holla"
7 @options.destroyUpgrade ?= false
8 @server = engineServer.attach @httpServer, @options
9 @server.httpServer = @httpServer
10 @server.on 'connection', @handleConnection
11
12 presence: (user, presence, users) ->
13 for id in users
14 @server.clients[id]?.send JSON.stringify
15 type: "presence"
16 args:
17 name: user
18 online: presence.online
19 return
20
21 handleConnection: (socket) =>
22 socket.on 'message', (msg) =>
23 console.log socket.id, msg
24 try
25 msg = JSON.parse msg
26 catch e
27 return
28 return unless msg.type and typeof msg.type is "string"
29 return if msg.args and typeof msg.args isnt "object"
30
31 if msg.type is "identify"
32 return unless msg.args
33 return unless msg.args.name
34 req =
35 name: msg.args.name
36 socket: socket
37 @identify req, (res=true) ->
38 socket.identity ?= msg.args.name if res is true
39 socket.send JSON.stringify
40 type: "identify"
41 args:
42 result: res
43
44 else if msg.type is "offer"
45 return unless msg.to
46 return unless socket.identity
47 @getId msg.to, (id) =>
48 @server.clients[id]?.send JSON.stringify
49 type: "offer"
50 from: socket.identity
51
52 else if msg.type is "hangup"
53 return unless msg.to
54 return unless socket.identity
55 @getId msg.to, (id) =>
56 @server.clients[id]?.send JSON.stringify
57 type: "hangup"
58 from: socket.identity
59
60 else if msg.type is "answer"
61 return unless msg.to
62 return unless msg.args
63 return unless msg.args.accepted?
64 return unless socket.identity
65 @getId msg.to, (id) =>
66 @server.clients[id]?.send JSON.stringify
67 type: "answer"
68 from: socket.identity
69 args:
70 accepted: msg.args.accepted
71
72 else if msg.type is "candidate"
73 return unless msg.to
74 return unless msg.args
75 return unless msg.args.candidate
76 return unless socket.identity
77 @getId msg.to, (id) =>
78 @server.clients[id]?.send JSON.stringify
79 type: "candidate"
80 from: socket.identity
81 args:
82 candidate: msg.args.candidate
83
84 else if msg.type is "sdp"
85 return unless msg.to
86 return unless msg.args
87 return unless msg.args.sdp
88 return unless msg.args.type
89 return unless socket.identity
90 @getId msg.to, (id) =>
91 @server.clients[id]?.send JSON.stringify
92 type: "sdp"
93 from: socket.identity
94 args:
95 sdp: msg.args.sdp
96 type: msg.args.type
97
98 else if msg.type is "chat"
99 return unless msg.to
100 return unless msg.args
101 return unless msg.args.message
102 return unless socket.identity
103 @getId msg.to, (id) =>
104 @server.clients[id]?.send JSON.stringify
105 type: "chat"
106 from: socket.identity
107 args:
108 message: msg.args.message
109
110
111
112 socket.on 'error', (err) =>
113 req =
114 name: socket.identity
115 reason: err
116 socket: socket
117 @error? req
118
119 socket.on 'close', (reason) =>
120 req =
121 name: socket.identity
122 reason: reason
123 socket: socket
124
125 @close? req
126
127module.exports = Server