// // rhimportd // // The Radio Helsinki Rivendell Import Daemon // // // Copyright (C) 2015 Christian Pointner // // This file is part of rhimportd. // // rhimportd is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // rhimportd is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with rhimportd. If not, see . // package main import ( // "encoding/json" "github.com/gorilla/websocket" "helsinki.at/rhimport" "html" "net/http" ) func webSocketHandler(conf *rhimport.Config, rddb *rhimport.RdDbChan, trusted bool, w http.ResponseWriter, r *http.Request) { rhdl.Printf("WebSocketHandler: request for '%s'", html.EscapeString(r.URL.Path)) ws, err := websocket.Upgrade(w, r, nil, 1024, 1024) if _, ok := err.(websocket.HandshakeError); ok { http.Error(w, "Not a websocket handshake", 400) return } else if err != nil { rhdl.Println("WebSocket Client", ws.RemoteAddr(), "error:", err) return } rhdl.Println("WebSocket Client", ws.RemoteAddr(), "connected") for { msgtype, msg, err := ws.ReadMessage() if err != nil { rhdl.Println("WebSocket Client", ws.RemoteAddr(), "disconnected:", err) return } if msgtype == websocket.TextMessage { // TODO: implement the actual proto rhdl.Println("Websocket Client", ws.RemoteAddr(), "got:", string(msg)) if err := ws.WriteMessage(websocket.TextMessage, msg); err != nil { rhdl.Println("WebScoket Client", ws.RemoteAddr(), "write error:", err) return } } } return }