diff --git a/app/cmd.go b/app/cmd.go index ff683fe..6bd4746 100644 --- a/app/cmd.go +++ b/app/cmd.go @@ -48,12 +48,9 @@ func listHandler(w http.ResponseWriter, _ *http.Request) { } func debugHandler(w http.ResponseWriter, _ *http.Request) { - ws.Count <- 0 - l := <-ws.Count runtime.ReadMemStats(&memInfo) j, err := json.Marshal(struct { Goroutines int - WebSocket int Uptime int64 Alloc uint64 HeapSys uint64 @@ -62,7 +59,6 @@ func debugHandler(w http.ResponseWriter, _ *http.Request) { Alloc: memInfo.Alloc, HeapSys: memInfo.HeapSys, Uptime: uptime, - WebSocket: l, }) if err == nil { fmt.Fprint(w, string(j)) diff --git a/app/echo.go b/app/echo.go deleted file mode 100644 index 43bd1e9..0000000 --- a/app/echo.go +++ /dev/null @@ -1,93 +0,0 @@ -package main - -import ( - "fmt" - "time" - "net/http" - - "github.com/gorilla/websocket" -) - -var upgrader = websocket.Upgrader{ - ReadBufferSize: 1024, - WriteBufferSize: 1024, - CheckOrigin: func(r *http.Request) bool { - if r.Header.Get("origin") == "https://statbate.com" { - return true - } - return false - }, -} - -var ( - wsClients = make(map[*websocket.Conn]struct{}) - - ws = struct { - Count chan int - Send chan []byte - Add chan *websocket.Conn - Del chan *websocket.Conn - }{ - Count: make(chan int, 100), - Send: make(chan []byte, 100), - Add: make(chan *websocket.Conn, 100), - Del: make(chan *websocket.Conn, 100), - } -) - -func broadcast() { - ticker := time.NewTicker(30 * time.Second) - for { - select { - case conn := <-ws.Add: - wsClients[conn] = struct{}{} - - case conn := <-ws.Del: - delete(wsClients, conn) - - case <-ws.Count: - ws.Count <- len(wsClients) - - case message := <-ws.Send: - sendMessage(message) - - case <-ticker.C: - sendMessage([]byte("ping")) - } - } -} - -func sendMessage(message []byte) { - for conn := range wsClients { - if err := conn.WriteMessage(1, message); err != nil { - conn.Close() - delete(wsClients, conn) - } - } -} - -func wsHandler(w http.ResponseWriter, r *http.Request) { - conn, err := upgrader.Upgrade(w, r, nil) - if err != nil { - return - } - go readWS(conn) -} - -func readWS(conn *websocket.Conn) { - defer conn.Close() - - ws.Add <- conn - - defer func() { - ws.Del <- conn - }() - - for { - _, _, err := conn.ReadMessage() - if err != nil { - fmt.Println("readWS", err.Error()) - return - } - } -} diff --git a/app/main.go b/app/main.go index 9a5a037..8e27cbd 100644 --- a/app/main.go +++ b/app/main.go @@ -28,6 +28,8 @@ var ( Mysql, Clickhouse *sqlx.DB json = jsoniter.ConfigCompatibleWithStandardLibrary + + socketServer = make(chan []byte, 100) save = make(chan saveData, 100) slog = make(chan saveLog, 100) @@ -54,9 +56,8 @@ func main() { go announceCount() go saveDB() go saveLogs() - go broadcast() + go socketHandler() - http.HandleFunc("/stripchat/ws/", wsHandler) http.HandleFunc("/stripchat/cmd/", cmdHandler) http.HandleFunc("/stripchat/list/", listHandler) http.HandleFunc("/stripchat/debug/", debugHandler) @@ -90,6 +91,19 @@ func initClickhouse() { Clickhouse = db } +func socketHandler() { + for { + select { + case b := <-socketServer: + conn, err := net.Dial("unix", "/tmp/echo.sock") + if err == nil { + conn.Write(b) + conn.Close() + } + } + } +} + func randInt(min int, max int) int { return min + rand.Intn(max-min) } diff --git a/app/save.go b/app/save.go index 7e87c4c..73587c4 100644 --- a/app/save.go +++ b/app/save.go @@ -131,16 +131,18 @@ func saveDB() { if m.Amount > 49 { msg, err := json.Marshal(struct { + Chanel string `json:"chanel"` Room string `json:"room"` Donator string `json:"donator"` Amount int64 `json:"amount"` }{ + Chanel: "stripchat", Room: m.Room, Donator: m.From, Amount: m.Amount, }) if err == nil { - ws.Send <- msg + socketServer <- msg } } @@ -154,10 +156,14 @@ func saveDB() { if minutes >= 5 && now > index["last"]+30 { seconds += minutes * 60 msg, err := json.Marshal(struct { + Chanel string `json:"chanel"` Index float64 `json:"index"` - }{Index: float64(index["tokens"]) / float64(seconds) * 3600 * 0.05 / 1000}) + }{ + Chanel: "stripchat", + Index: float64(index["tokens"]) / float64(seconds) * 3600 * 0.05 / 1000, + }) if err == nil { - ws.Send <- msg + socketServer <- msg } index["last"] = now } diff --git a/app/worker.go b/app/worker.go index b65bd3b..9b73e87 100644 --- a/app/worker.go +++ b/app/worker.go @@ -108,10 +108,14 @@ func announceCount() { rooms.Count <- 0 l := <-rooms.Count msg, err := json.Marshal(struct { + Chanel string `json:"chanel"` Count int `json:"count"` - }{Count: l}) + }{ + Chanel: "stripchat", + Count: l, + }) if err == nil { - ws.Send <- msg + socketServer <- msg } } }