Skip to content

Instantly share code, notes, and snippets.

@nullmastermind
Forked from tmichel/index.html
Created August 14, 2017 20:59
Show Gist options
  • Save nullmastermind/6b3488c7bc1af99e2f41eba6aa7e79b7 to your computer and use it in GitHub Desktop.
Save nullmastermind/6b3488c7bc1af99e2f41eba6aa7e79b7 to your computer and use it in GitHub Desktop.

Revisions

  1. @tmichel tmichel created this gist Nov 9, 2013.
    51 changes: 51 additions & 0 deletions index.html
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,51 @@
    <html>
    <head>
    <title>WebSocket demo</title>
    </head>
    <body>

    <div>
    <form>
    <label for="numberfield">Number</label>
    <input type="text" id="numberfield" placeholder="12"/><br />
    <button type="button" id="sendBtn">Send</button>
    </form>
    </div>
    <div id="container"></div>

    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(function () {
    var ws;

    if (window.WebSocket === undefined) {
    $("#container").append("Your browser does not support WebSockets");
    return;
    } else {
    ws = initWS();
    }

    function initWS() {
    var socket = new WebSocket("ws://localhost:8080/ws"),
    container = $("#container")
    socket.onopen = function() {
    container.append("<p>Socket is open</p>");
    };
    socket.onmessage = function (e) {
    container.append("<p> Got some shit:" + e.data + "</p>");
    }
    socket.onclose = function () {
    container.append("<p>Socket closed</p>");
    }

    return socket;
    }

    $("#sendBtn").click(function (e) {
    e.preventDefault();
    ws.send(JSON.stringify({ Num: parseInt($("#numberfield").val()) }));
    });
    });
    </script>
    </body>
    </html>
    57 changes: 57 additions & 0 deletions ws.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,57 @@
    package main

    import (
    "fmt"
    "github.com/gorilla/websocket"
    "io/ioutil"
    "net/http"
    )

    type msg struct {
    Num int
    }

    func main() {
    http.HandleFunc("/ws", wsHandler)
    http.HandleFunc("/", rootHandler)

    panic(http.ListenAndServe(":8080", nil))
    }

    func rootHandler(w http.ResponseWriter, r *http.Request) {
    content, err := ioutil.ReadFile("index.html")
    if err != nil {
    fmt.Println("Could not open file.", err)
    }
    fmt.Fprintf(w, "%s", content)
    }

    func wsHandler(w http.ResponseWriter, r *http.Request) {
    if r.Header.Get("Origin") != "http://"+r.Host {
    http.Error(w, "Origin not allowed", 403)
    return
    }
    conn, err := websocket.Upgrade(w, r, w.Header(), 1024, 1024)
    if err != nil {
    http.Error(w, "Could not open websocket connection", http.StatusBadRequest)
    }

    go echo(conn)
    }

    func echo(conn *websocket.Conn) {
    for {
    m := msg{}

    err := conn.ReadJSON(&m)
    if err != nil {
    fmt.Println("Error reading json.", err)
    }

    fmt.Printf("Got message: %#v\n", m)

    if err = conn.WriteJSON(m); err != nil {
    fmt.Println(err)
    }
    }
    }