This commit is contained in:
poiuty 2022-08-15 13:12:00 +03:00
parent 30e7296135
commit ac13a3fab3

View file

@ -1,17 +1,17 @@
package main package main
import ( import (
"fmt"
"github.com/gorilla/websocket"
"net/http"
"net/url"
"strings"
"time"
"regexp"
"bytes" "bytes"
"context" "context"
"fmt"
"github.com/gorilla/websocket"
"io/ioutil" "io/ioutil"
"net/http"
"net/url"
"regexp"
"strconv" "strconv"
"strings"
"time"
) )
var uptime = time.Now().Unix() var uptime = time.Now().Unix()
@ -74,7 +74,7 @@ func mapRooms() {
for { for {
select { select {
case m := <-rooms.Add: case m := <-rooms.Add:
data[m.room] = &Info{Id: m.Id, Server: m.Server, Proxy: m.Proxy, Start: m.Start, Last: m.Last, Online: m.Online, Income: m.Income, Dons: m.Dons, Tips: m.Tips, ch: m.ch} data[m.room] = &Info{Id: m.Id, Rid: m.Rid, Server: m.Server, Proxy: m.Proxy, Start: m.Start, Last: m.Last, Online: m.Online, Income: m.Income, Dons: m.Dons, Tips: m.Tips, ch: m.ch}
case s := <-rooms.Json: case s := <-rooms.Json:
j, err := json.Marshal(data) j, err := json.Marshal(data)
@ -146,26 +146,26 @@ func getToken(room string) string {
func xWorker(workerData Info) { func xWorker(workerData Info) {
fmt.Println("Start", workerData.room, "id", workerData.Id, "proxy", workerData.Proxy) fmt.Println("Start", workerData.room, "id", workerData.Id, "proxy", workerData.Proxy)
rooms.Add <- workerData rooms.Add <- workerData
defer func() { defer func() {
rooms.Del <- workerData.room rooms.Del <- workerData.room
}() }()
xurl := workerData.Server xurl := workerData.Server
if xurl == "" { if xurl == "" {
xurl = getToken(workerData.room) xurl = getToken(workerData.room)
workerData.Server = xurl workerData.Server = xurl
} }
u, err := url.Parse(xurl) u, err := url.Parse(xurl)
if err != nil { if err != nil {
fmt.Println(xurl, err, workerData.room) fmt.Println(xurl, err, workerData.room)
return return
} }
Dialer := *websocket.DefaultDialer Dialer := *websocket.DefaultDialer
proxyMap := make(map[string]string) proxyMap := make(map[string]string)
@ -190,9 +190,9 @@ func xWorker(workerData Info) {
} }
defer c.Close() defer c.Close()
dons := make(map[string]struct{}) dons := make(map[string]struct{})
for { for {
c.SetReadDeadline(time.Now().Add(30 * time.Minute)) c.SetReadDeadline(time.Now().Add(30 * time.Minute))
_, message, err := c.ReadMessage() _, message, err := c.ReadMessage()
@ -200,18 +200,18 @@ func xWorker(workerData Info) {
fmt.Println(err.Error(), workerData.room) fmt.Println(err.Error(), workerData.room)
return return
} }
now := time.Now().Unix() now := time.Now().Unix()
slog <- saveLog{workerData.Rid, time.Now().Unix(), string(message)} slog <- saveLog{workerData.Rid, time.Now().Unix(), string(message)}
m := &ServerResponse{} m := &ServerResponse{}
if err = json.Unmarshal(message, m); err != nil { if err = json.Unmarshal(message, m); err != nil {
fmt.Println(err.Error(), workerData.room) fmt.Println(err.Error(), workerData.room)
continue continue
} }
workerData.Last = now workerData.Last = now
rooms.Add <- workerData rooms.Add <- workerData
@ -248,29 +248,29 @@ func xWorker(workerData Info) {
if strings.Contains(m.SubscriptionKey, "userUpdated") && m.Params.User.Status == "off" { if strings.Contains(m.SubscriptionKey, "userUpdated") && m.Params.User.Status == "off" {
fmt.Println("user exiting", workerData.room) fmt.Println("user exiting", workerData.room)
return return
} }
if strings.Contains(m.SubscriptionKey, "modelStatusChanged") && m.Params.Model.Status == "off" { if strings.Contains(m.SubscriptionKey, "modelStatusChanged") && m.Params.Model.Status == "off" {
fmt.Println("user exiting", workerData.room) fmt.Println("user exiting", workerData.room)
return return
} }
if m.Params.Message.Type == "tip" { if m.Params.Message.Type == "tip" {
if len(m.Params.Message.Userdata.Username) < 3 { if len(m.Params.Message.Userdata.Username) < 3 {
continue continue
} }
fmt.Println(m.Params.Message.Userdata.Username, "send", m.Params.Message.Details.Amount.Value(), "tokens") fmt.Println(m.Params.Message.Userdata.Username, "send", m.Params.Message.Details.Amount.Value(), "tokens")
workerData.Tips++ workerData.Tips++
if _, ok := dons[m.Params.Message.Userdata.Username]; !ok { if _, ok := dons[m.Params.Message.Userdata.Username]; !ok {
dons[m.Params.Message.Userdata.Username] = struct{}{} dons[m.Params.Message.Userdata.Username] = struct{}{}
workerData.Dons++ workerData.Dons++
} }
save <- saveData{workerData.room, strings.ToLower(m.Params.Message.Userdata.Username), workerData.Rid, m.Params.Message.Details.Amount.Value(), now} save <- saveData{workerData.room, strings.ToLower(m.Params.Message.Userdata.Username), workerData.Rid, m.Params.Message.Details.Amount.Value(), now}
workerData.Income += m.Params.Message.Details.Amount.Value() workerData.Income += m.Params.Message.Details.Amount.Value()
rooms.Add <- workerData rooms.Add <- workerData
} }