Start.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package server
  2. import (
  3. "log"
  4. "net/http"
  5. "strconv"
  6. "time"
  7. "github.com/gorilla/websocket"
  8. )
  9. func (server *Server) Start() {
  10. // Start the server
  11. http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
  12. handleConnections(w, r)
  13. })
  14. log.Fatal(http.ListenAndServe(server.ListenAddress+":"+strconv.Itoa(server.ListenPort), nil))
  15. // return nil
  16. }
  17. var upgrader = websocket.Upgrader{
  18. ReadBufferSize: 1024,
  19. WriteBufferSize: 1024,
  20. }
  21. func handleConnections(w http.ResponseWriter, r *http.Request) {
  22. conn, err := upgrader.Upgrade(w, r, nil)
  23. if err != nil {
  24. log.Println(err)
  25. return
  26. }
  27. defer conn.Close()
  28. log.Println("Starting server")
  29. go readMessages(conn)
  30. writeMessages(conn)
  31. }
  32. func readMessages(conn *websocket.Conn) {
  33. for {
  34. messageType, message, err := conn.ReadMessage()
  35. if err != nil {
  36. log.Println("Error reading message:", err)
  37. break
  38. }
  39. log.Printf("Received(%d): %s\n", messageType, message)
  40. // This sets the time-out for any incoming messages.
  41. // conn.SetReadDeadline(time.Now().Add(10 * time.Second))
  42. }
  43. }
  44. func writeMessages(conn *websocket.Conn) {
  45. for {
  46. err := conn.WriteMessage(websocket.TextMessage, []byte("keep alive - staying alive"))
  47. if err != nil {
  48. log.Println("Error writing message:", err)
  49. break
  50. }
  51. // This sets the time-out for any outgoing messages.
  52. // conn.SetWriteDeadline(time.Now().Add(10 * time.Second))
  53. time.Sleep(time.Minute)
  54. }
  55. }