Skip to content

Commit 9f956a4

Browse files
committed
ws
1 parent 2b83206 commit 9f956a4

23 files changed

+3502
-3
lines changed

Gopkg.lock

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

main.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ import (
1212
"runtime/debug"
1313
"time"
1414

15+
"github.com/gorilla/websocket"
1516
"github.com/sourcegraph/go-langserver/langserver"
1617
"github.com/sourcegraph/jsonrpc2"
1718

1819
_ "net/http/pprof"
1920
)
2021

2122
var (
22-
mode = flag.String("mode", "stdio", "communication mode (stdio|tcp)")
23-
addr = flag.String("addr", ":4389", "server listen address (tcp)")
23+
mode = flag.String("mode", "stdio", "communication mode (stdio|tcp|websocket)")
24+
addr = flag.String("addr", ":4389", "server listen address (tcp or websocket)")
2425
trace = flag.Bool("trace", false, "print all requests and responses")
2526
logfile = flag.String("logfile", "", "also log to this file (in addition to stderr)")
2627
printVersion = flag.Bool("version", false, "print version and exit")
@@ -111,7 +112,7 @@ func run(cfg langserver.Config) error {
111112
}
112113
defer lis.Close()
113114

114-
log.Println("langserver-go: listening on", *addr)
115+
log.Println("langserver-go: listening for TCP connections on", *addr)
115116
for {
116117
conn, err := lis.Accept()
117118
if err != nil {
@@ -120,6 +121,24 @@ func run(cfg langserver.Config) error {
120121
jsonrpc2.NewConn(context.Background(), jsonrpc2.NewBufferedStream(conn, jsonrpc2.VSCodeObjectCodec{}), handler, connOpt...)
121122
}
122123

124+
case "websocket":
125+
mux := http.NewServeMux()
126+
127+
mux.HandleFunc("/", func(responseWriter http.ResponseWriter, request *http.Request) {
128+
var upgrader = websocket.Upgrader{}
129+
connection, err := upgrader.Upgrade(responseWriter, request, nil)
130+
if err != nil {
131+
log.Println("error upgrading HTTP to WebSocket:", err)
132+
}
133+
defer connection.Close()
134+
jc := jsonrpc2.NewConn(context.Background(), NewObjectStream(connection), handler, connOpt...)
135+
<-jc.DisconnectNotify()
136+
})
137+
138+
log.Println("PRE langserver-go: listening for WebSocket connections on", *addr)
139+
http.ListenAndServe(*addr, mux)
140+
return nil
141+
123142
case "stdio":
124143
log.Println("langserver-go: reading on stdin, writing on stdout")
125144
<-jsonrpc2.NewConn(context.Background(), jsonrpc2.NewBufferedStream(stdrwc{}, jsonrpc2.VSCodeObjectCodec{}), handler, connOpt...).DisconnectNotify()

vendor/github.com/gorilla/websocket/AUTHORS

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/gorilla/websocket/LICENSE

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)