forked from nmenon/seva
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rework the websocket interface to be a little more stateless, using command + arguments in a single JSON burst and echoing that back with the results. Not that it really matters since we only allow one connection at at time. Signed-off-by: StaticRocket <[email protected]>
- Loading branch information
1 parent
2195450
commit 2aca6ab
Showing
4 changed files
with
161 additions
and
109 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
/* | ||
Main websocket control logic | ||
*/ | ||
package main | ||
|
||
import ( | ||
"encoding/json" | ||
"log" | ||
"net/http" | ||
|
||
"github.com/gorilla/websocket" | ||
) | ||
|
||
var upgrader = websocket.Upgrader{} | ||
|
||
type WebSocketCommand struct { | ||
Command string `json:"command"` | ||
Arguments []string `json:"arguments"` | ||
ExitCode int `json:"exit_code"` | ||
Response []string `json:"response"` | ||
} | ||
|
||
func websocket_controller(w http.ResponseWriter, r *http.Request) { | ||
c, err := upgrader.Upgrade(w, r, nil) | ||
if err != nil { | ||
log.Print("upgrade:", err) | ||
return | ||
} | ||
defer c.Close() | ||
for { | ||
_, message, err := c.ReadMessage() | ||
if err != nil { | ||
log.Println("read:", err) | ||
break | ||
} | ||
log.Printf("recv: %s", message) | ||
|
||
var command WebSocketCommand | ||
err = json.Unmarshal(message, &command) | ||
if err != nil { | ||
log.Println(err) | ||
resp := "Ignoring invalid command" | ||
log.Println(resp) | ||
command.ExitCode = 1 | ||
command.Response = append(command.Response, resp) | ||
} | ||
|
||
switch command.Command { | ||
case "start_app": | ||
command = start_app(command) | ||
case "load_app": | ||
command = load_app(command) | ||
case "stop_app": | ||
command = stop_app(command) | ||
case "get_app": | ||
command = get_app(command) | ||
case "is_running": | ||
command = is_running(command) | ||
} | ||
|
||
json, err := json.Marshal(command) | ||
if err != nil { | ||
log.Println("Error serializing response!") | ||
} | ||
err = c.WriteMessage(websocket.TextMessage, []byte(json)) | ||
if err != nil { | ||
log.Println("write:", err) | ||
break | ||
} | ||
} | ||
} |
Oops, something went wrong.