@@ -5,14 +5,12 @@ import (
5
5
"fmt"
6
6
"log"
7
7
"net/http"
8
- "net/url"
9
8
"os"
10
9
"strconv"
11
10
"time"
12
11
13
12
"github.com/julien/gogala/lib"
14
13
"golang.org/x/net/websocket"
15
- "golang.org/x/tools/playground/socket"
16
14
)
17
15
18
16
const (
27
25
)
28
26
29
27
func init () {
30
- flag .BoolVar (& verbose , "verbose" , true , "Debug mode" )
28
+ flag .BoolVar (& verbose , "verbose" , false , "Debug mode" )
31
29
32
30
if * listenAddr == "" {
33
31
* listenAddr = "8080"
@@ -39,21 +37,11 @@ func main() {
39
37
40
38
debug = lib .Debug (verbose )
41
39
42
- u , err := url .Parse ("ws://localhost:" + * listenAddr + "/co" )
43
- if err != nil {
44
- debug .Printf ("Error: %v\n " , err )
45
- }
46
-
47
40
http .Handle ("/" , indexHandler ())
48
41
http .Handle ("/static/" , lib .GZipHandler (lib .CacheHandler (30 , staticHandler ())))
49
42
http .Handle ("/ws" , websocket .Handler (wsHandler ))
50
43
51
- ws := socket .NewHandler (u )
52
-
53
- http .Handle ("/co" , ws .Handler )
54
-
55
44
debug .Printf ("Listening on: %s\n " , * listenAddr )
56
-
57
45
log .Fatal (http .ListenAndServe (":" + * listenAddr , nil ))
58
46
}
59
47
@@ -70,36 +58,33 @@ func staticHandler() http.Handler {
70
58
}
71
59
72
60
func wsHandler (ws * websocket.Conn ) {
73
- //! Remember: returning here disconnects client
74
-
75
61
registerClient (ws )
76
62
77
63
for {
78
64
var msg lib.Message
79
65
var out lib.Message
80
66
81
67
if err := websocket .JSON .Receive (ws , & msg ); err != nil {
82
- debug .Printf ("Error reading message:\n %s\n " , err )
68
+ debug .Printf ("Error reading message: %s\n " , err )
83
69
unregisterClient (ws )
84
70
return
85
71
}
86
72
87
- debug .Printf ("Received message:\n %s\n " , msg .Kind )
73
+ debug .Printf ("Received message: %s\n " , msg .Kind )
88
74
89
75
switch msg .Kind {
90
76
case "format" :
91
77
data , err := lib .Format ([]byte (msg .Body ))
92
78
if err != nil {
93
-
94
- debug .Printf ("Format Error:\n %s\n " , err )
79
+ debug .Printf ("Format Error: %s\n " , err )
95
80
96
81
out = lib.Message {
97
82
Kind : "error" ,
98
83
Body : err .Error (),
99
84
}
100
85
101
86
if err := sendToAll (ws , out ); err != nil {
102
- debug .Printf ("Error sending message:\n %s\n " , err )
87
+ debug .Printf ("Error sending message: %s\n " , err )
103
88
}
104
89
105
90
}
@@ -111,49 +96,42 @@ func wsHandler(ws *websocket.Conn) {
111
96
Args : lib .MakeArgs (c .Name ),
112
97
}
113
98
if err := sendToAll (ws , out ); err != nil {
114
- debug .Printf ("Error sending message:\n %s\n " , err )
99
+ debug .Printf ("Error sending message: %s\n " , err )
115
100
}
116
101
}
117
102
118
103
case "save" :
119
104
data , err := lib .CreateGist ("GoGist" , msg .Body )
120
105
if err != nil {
121
- debug .Printf ("Error creating gist:\n %v\n " , err )
106
+ debug .Printf ("Error creating gist: %v\n " , err )
122
107
}
123
- debug .Printf ("Created gist:\n %s\n " , data )
124
108
125
- // Parse Githubs reponse
126
109
resp , err := lib .ParseResponse (data )
127
110
if err != nil {
128
- debug .Printf ("Error parsing Gists response:\n %s\n " , err )
111
+ debug .Printf ("Error parsing Gists response: %s\n " , err )
129
112
}
130
113
131
114
s := fmt .Sprintf ("%s" , resp ["html_url" ])
132
- debug .Printf ("Gist response:\n %s\n " , s )
133
115
134
116
out = lib.Message {
135
117
Kind : "gist" ,
136
118
Body : s ,
137
119
}
138
120
139
121
if err := sendToAll (ws , out ); err != nil {
140
- debug .Printf ("Error sending message:\n %s\n " , err )
122
+ debug .Printf ("Error sending message: %s\n " , err )
141
123
}
142
124
143
125
case "compile" :
144
- debug .Printf ("Client wants to compile code:\n %s\n " , msg .Body )
145
-
146
126
data , err := lib .Compile (msg .Body )
147
127
if err != nil {
148
- debug .Printf ("Error compiling code (remote):\n %s\n " , err )
128
+ debug .Printf ("Error compiling code (remote): %s\n " , err )
149
129
}
150
- debug .Printf ("Compiled code:\n %s\n " , string (data ))
151
130
152
131
cr , err := lib .ParseCompileResponse (data )
153
132
if err != nil {
154
- debug .Printf ("Error parsing compile response:\n %s\n " , err )
133
+ debug .Printf ("Error parsing compile response: %s\n " , err )
155
134
}
156
- debug .Printf ("Compile response:\n %s\n " , cr )
157
135
158
136
// WTF!
159
137
if s := cr .Message (); s != nil {
@@ -163,40 +141,31 @@ func wsHandler(ws *websocket.Conn) {
163
141
Body : s .(string ),
164
142
}
165
143
166
- if err := sendToAll (ws , out ); err != nil {
167
- debug .Printf ("Error sending message:\n %s\n " , err )
168
- }
144
+ sendToAll (ws , out )
169
145
}
170
146
}
171
147
172
148
case "chat" :
173
- debug .Printf ("User message:\n %s\n " , msg .Body )
174
149
t := time .Now ().Format (time .Kitchen )
175
150
176
151
if c := getClient (ws ); c != nil {
177
152
out = lib.Message {
178
153
Kind : "chat" ,
179
154
Body : lib .AppendString ("[" , t , "]" , c .Name , ": " , msg .Body ),
180
155
}
181
- if err := sendToAll (ws , out ); err != nil {
182
- debug .Printf ("Error sending message:\n %s\n " , err )
183
- }
156
+ sendToAll (ws , out )
184
157
}
185
158
186
159
case "update" :
187
- debug .Printf ("Text update:\n %v\n " , msg .Args )
188
-
189
160
if c := getClient (ws ); c != nil {
190
- debug .Printf ("Sending update\n " )
191
-
192
161
out = lib.Message {
193
162
Kind : "update" ,
194
163
Body : msg .Body ,
195
164
Args : lib .MakeArgs (c .Name ),
196
165
}
197
166
198
167
if err := sendToOthers (ws , out ); err != nil {
199
- debug .Printf ("Error sending message:\n %s\n " , err )
168
+ debug .Printf ("Error sending message: %s\n " , err )
200
169
}
201
170
}
202
171
}
@@ -219,24 +188,17 @@ func registerClient(ws *websocket.Conn) {
219
188
Conn : ws ,
220
189
}
221
190
222
- // If this client is not alone,
223
- // he is a "spectator"
224
- s := true
225
- if n > 0 {
226
- s = false
227
- }
228
-
229
191
// Send welcome message
230
192
var msg lib.Message
231
193
232
194
msg = lib.Message {
233
195
Kind : "info" ,
234
196
Body : lib .AppendString ("[" , lib .PrintTimeStamp (), "] " , "Welcome, " , clients [u ].Name ),
235
- Args : lib .MakeArgs (clients [u ].Name , s ),
197
+ Args : lib .MakeArgs (clients [u ].Name ),
236
198
}
237
199
238
200
if err := sendToClient (ws , msg ); err != nil {
239
- debug .Printf ("Error sending message:\n %s\n " , err )
201
+ debug .Printf ("Error sending message: %s\n " , err )
240
202
}
241
203
242
204
msg = lib.Message {
@@ -245,7 +207,7 @@ func registerClient(ws *websocket.Conn) {
245
207
}
246
208
247
209
if err := sendToOthers (ws , msg ); err != nil {
248
- debug .Printf ("Error sending mesaage to others:\n %s\n " , err )
210
+ debug .Printf ("Error sending mesaage to others: %s\n " , err )
249
211
}
250
212
}
251
213
@@ -304,12 +266,12 @@ func sendToOthers(ws *websocket.Conn, msg lib.Message) error {
304
266
func sendToAll (ws * websocket.Conn , msg lib.Message ) error {
305
267
306
268
if err := sendToClient (ws , msg ); err != nil {
307
- debug .Printf ("Error sending message to client:\n %s\n " , err )
269
+ debug .Printf ("Error sending message to client: %s\n " , err )
308
270
return err
309
271
}
310
272
311
273
if err := sendToOthers (ws , msg ); err != nil {
312
- debug .Printf ("Error sending message to others:\n %s\n " , err )
274
+ debug .Printf ("Error sending message to others: %s\n " , err )
313
275
return err
314
276
}
315
277
0 commit comments