Application works with 2 business way:
- Read messages from REDIS and push it to ipads through web socket connection
- Receive messages from ipad through web socket connection and save it to redis
- git clone http://rhodecode.shire.local/tatneft/agenda-web-socket-server ws_agenda
- go get github.com/garyburd/redigo/redis
- go get github.com/gorilla/websocket
- go install {FOLDER}
TEST client:
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main
import (
"flag"
"log"
"net/url"
"os"
"os/signal"
"time"
"github.com/gorilla/websocket"
"net/http"
)
var addr = flag.String("addr", "localhost:8080", "http service address")
func main() {
flag.Parse()
log.SetFlags(0)
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
u := url.URL{Scheme: "ws", Host: *addr, Path: "/ws"}
log.Printf("connecting to %s", u.String())
header := http.Header{}
header.Set("X-Auth-Token", "1")
c, _, err := websocket.DefaultDialer.Dial(u.String(), header)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
go func() {
defer c.Close()
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("recv: %s", message)
}
}()
ticker := time.NewTicker(time.Minute)
defer ticker.Stop()
for {
select {
case t := <-ticker.C:
err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))
if err != nil {
log.Println("write:", err)
return
}
case <-interrupt:
log.Println("interrupt")
err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
if err != nil {
log.Println("write close:", err)
return
}
select {
case <-time.After(time.Second):
}
c.Close()
return
}
}
}