websocket channel enhance
This commit is contained in:
parent
6279324854
commit
d1b6a3e32d
|
@ -44,7 +44,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
editorChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
editorChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
|
||||||
ret := map[string]interface{}{"output": "Editor initialized", "cmd": "init-editor"}
|
ret := map[string]interface{}{"output": "Editor initialized", "cmd": "init-editor"}
|
||||||
err := editorChan.Conn.WriteJSON(&ret)
|
err := editorChan.WriteJSON(&ret)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
ret = map[string]interface{}{"output": string(output.Bytes()), "cmd": "autocomplete"}
|
ret = map[string]interface{}{"output": string(output.Bytes()), "cmd": "autocomplete"}
|
||||||
|
|
||||||
if err := session.EditorWS[sid].Conn.WriteJSON(&ret); err != nil {
|
if err := session.EditorWS[sid].WriteJSON(&ret); err != nil {
|
||||||
glog.Error("Editor WS ERROR: " + err.Error())
|
glog.Error("Editor WS ERROR: " + err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ func event2Notification(e *event.Event) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
wsChannel.Conn.WriteJSON(notification)
|
wsChannel.WriteJSON(notification)
|
||||||
|
|
||||||
wsChannel.Refresh()
|
wsChannel.Refresh()
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
|
||||||
ret := map[string]interface{}{"notification": "Notification initialized", "cmd": "init-notification"}
|
ret := map[string]interface{}{"notification": "Notification initialized", "cmd": "init-notification"}
|
||||||
err := wsChan.Conn.WriteJSON(&ret)
|
err := wsChan.WriteJSON(&ret)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
|
||||||
ret := map[string]interface{}{"output": "Ouput initialized", "cmd": "init-output"}
|
ret := map[string]interface{}{"output": "Ouput initialized", "cmd": "init-output"}
|
||||||
err := wsChan.Conn.WriteJSON(&ret)
|
err := wsChan.WriteJSON(&ret)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
channelRet["cmd"] = "run-done"
|
channelRet["cmd"] = "run-done"
|
||||||
channelRet["output"] = ""
|
channelRet["output"] = ""
|
||||||
|
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -150,7 +150,7 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if nil != wsChannel {
|
if nil != wsChannel {
|
||||||
channelRet["cmd"] = "run"
|
channelRet["cmd"] = "run"
|
||||||
channelRet["output"] = ""
|
channelRet["output"] = ""
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -177,7 +177,7 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if nil != wsChannel {
|
if nil != wsChannel {
|
||||||
channelRet["cmd"] = "run-done"
|
channelRet["cmd"] = "run-done"
|
||||||
channelRet["output"] = buf
|
channelRet["output"] = buf
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
break
|
break
|
||||||
|
@ -191,7 +191,7 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if nil != wsChannel {
|
if nil != wsChannel {
|
||||||
channelRet["cmd"] = "run"
|
channelRet["cmd"] = "run"
|
||||||
channelRet["output"] = buf
|
channelRet["output"] = buf
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
break
|
break
|
||||||
|
@ -219,7 +219,7 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
channelRet["cmd"] = "run-done"
|
channelRet["cmd"] = "run-done"
|
||||||
channelRet["output"] = buf
|
channelRet["output"] = buf
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
break
|
break
|
||||||
|
@ -235,7 +235,7 @@ func RunHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
channelRet["cmd"] = "run"
|
channelRet["cmd"] = "run"
|
||||||
channelRet["output"] = buf
|
channelRet["output"] = buf
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
break
|
break
|
||||||
|
@ -336,7 +336,7 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
|
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -439,7 +439,7 @@ func BuildHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
glog.V(3).Infof("Session [%s] 's build [id=%d, dir=%s] has done", sid, runningId, curDir)
|
glog.V(3).Infof("Session [%s] 's build [id=%d, dir=%s] has done", sid, runningId, curDir)
|
||||||
|
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
}
|
}
|
||||||
|
@ -508,7 +508,7 @@ func GoTestHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
|
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -553,7 +553,7 @@ func GoTestHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if nil != session.OutputWS[sid] {
|
if nil != session.OutputWS[sid] {
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
|
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
}
|
}
|
||||||
|
@ -623,7 +623,7 @@ func GoInstallHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
|
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -712,7 +712,7 @@ func GoInstallHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
glog.V(3).Infof("Session [%s] 's running [go install] [id=%d, dir=%s] has done", sid, runningId, curDir)
|
glog.V(3).Infof("Session [%s] 's running [go install] [id=%d, dir=%s] has done", sid, runningId, curDir)
|
||||||
|
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
}
|
}
|
||||||
|
@ -781,7 +781,7 @@ func GoGetHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
|
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
return
|
return
|
||||||
|
@ -825,7 +825,7 @@ func GoGetHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if nil != session.OutputWS[sid] {
|
if nil != session.OutputWS[sid] {
|
||||||
wsChannel := session.OutputWS[sid]
|
wsChannel := session.OutputWS[sid]
|
||||||
|
|
||||||
err := wsChannel.Conn.WriteJSON(&channelRet)
|
err := wsChannel.WriteJSON(&channelRet)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,7 +127,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
|
||||||
ret := map[string]interface{}{"output": "Session initialized", "cmd": "init-session"}
|
ret := map[string]interface{}{"output": "Session initialized", "cmd": "init-session"}
|
||||||
err := wsChan.Conn.WriteJSON(&ret)
|
err := wsChan.WriteJSON(&ret)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -149,7 +149,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
ret = map[string]interface{}{"output": "", "cmd": "session-output"}
|
ret = map[string]interface{}{"output": "", "cmd": "session-output"}
|
||||||
|
|
||||||
if err := wsChan.Conn.WriteJSON(&ret); err != nil {
|
if err := wsChan.WriteJSON(&ret); err != nil {
|
||||||
glog.Error("Session WS ERROR: " + err.Error())
|
glog.Error("Session WS ERROR: " + err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,7 +90,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
wsChan := util.WSChannel{Sid: sid, Conn: conn, Request: r, Time: time.Now()}
|
||||||
|
|
||||||
ret := map[string]interface{}{"output": "Shell initialized", "cmd": "init-shell"}
|
ret := map[string]interface{}{"output": "Shell initialized", "cmd": "init-shell"}
|
||||||
err := wsChan.Conn.WriteJSON(&ret)
|
err := wsChan.WriteJSON(&ret)
|
||||||
if nil != err {
|
if nil != err {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ func WSHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
ret = map[string]interface{}{"output": output, "cmd": "shell-output"}
|
ret = map[string]interface{}{"output": output, "cmd": "shell-output"}
|
||||||
|
|
||||||
if err := wsChan.Conn.WriteJSON(&ret); err != nil {
|
if err := wsChan.WriteJSON(&ret); err != nil {
|
||||||
glog.Error("Shell WS ERROR: " + err.Error())
|
glog.Error("Shell WS ERROR: " + err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,8 @@ var notification = {
|
||||||
notificationHTML = '';
|
notificationHTML = '';
|
||||||
|
|
||||||
if (data.cmd && "init-notification" === data.cmd) {
|
if (data.cmd && "init-notification" === data.cmd) {
|
||||||
|
console.log('[notification onmessage]' + e.data);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
package util
|
package util
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -29,6 +30,21 @@ type WSChannel struct {
|
||||||
Time time.Time // the latest use time
|
Time time.Time // the latest use time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WriteJSON writes the JSON encoding of v to the channel.
|
||||||
|
func (c *WSChannel) WriteJSON(v interface{}) (ret error) {
|
||||||
|
if nil == c.Conn {
|
||||||
|
return errors.New("connection is nil, channel has been closed")
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); nil != r {
|
||||||
|
ret = errors.New("channel has been closed")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
return c.Conn.WriteJSON(v)
|
||||||
|
}
|
||||||
|
|
||||||
// Close closed the channel.
|
// Close closed the channel.
|
||||||
func (c *WSChannel) Close() {
|
func (c *WSChannel) Close() {
|
||||||
if nil != c.Conn {
|
if nil != c.Conn {
|
||||||
|
|
Loading…
Reference in New Issue