animated-sniffle/app/main.go

147 lines
2.5 KiB
Go
Raw Normal View History

2022-07-27 11:28:07 +03:00
package main
import (
2022-08-07 14:18:21 +03:00
"fmt"
2022-07-27 11:28:07 +03:00
"log"
"math/rand"
"net"
"net/http"
"os"
"time"
_ "github.com/ClickHouse/clickhouse-go"
_ "github.com/go-sql-driver/mysql"
"github.com/jmoiron/sqlx"
jsoniter "github.com/json-iterator/go"
)
type Rooms struct {
Count chan int
Json chan string
2022-08-07 14:18:21 +03:00
Check chan string
Stop chan string
2022-07-27 11:28:07 +03:00
Del chan string
2022-08-07 14:18:21 +03:00
Add chan Info
2022-07-27 11:28:07 +03:00
}
2022-08-07 14:18:21 +03:00
var (
Mysql, Clickhouse *sqlx.DB
2022-07-27 11:28:07 +03:00
2022-08-07 14:18:21 +03:00
json = jsoniter.ConfigCompatibleWithStandardLibrary
2023-05-11 14:40:18 +03:00
socketServer = make(chan []byte, 100)
2022-07-27 11:28:07 +03:00
2022-08-07 14:18:21 +03:00
save = make(chan saveData, 100)
slog = make(chan saveLog, 100)
rooms = &Rooms{
Count: make(chan int),
Json: make(chan string),
Check: make(chan string),
Stop: make(chan string),
Del: make(chan string),
Add: make(chan Info),
}
)
2022-07-27 11:28:07 +03:00
func main() {
rand.Seed(time.Now().UnixNano())
startConfig()
initMysql()
initClickhouse()
go mapRooms()
go announceCount()
go saveDB()
go saveLogs()
2023-05-11 14:40:18 +03:00
go socketHandler()
2022-07-27 11:28:07 +03:00
http.HandleFunc("/bongacams/cmd/", cmdHandler)
http.HandleFunc("/bongacams/list/", listHandler)
http.HandleFunc("/bongacams/debug/", debugHandler)
2022-08-07 14:18:21 +03:00
go fastStart()
2022-07-27 11:28:07 +03:00
const SOCK = "/tmp/bongacams.sock"
os.Remove(SOCK)
unixListener, err := net.Listen("unix", SOCK)
if err != nil {
log.Fatal("Listen (UNIX socket): ", err)
}
defer unixListener.Close()
os.Chmod(SOCK, 0777)
log.Fatal(http.Serve(unixListener, nil))
}
func initMysql() {
db, err := sqlx.Connect("mysql", conf.Conn["mysql"])
if err != nil {
panic(err)
}
Mysql = db
}
func initClickhouse() {
db, err := sqlx.Connect("clickhouse", conf.Conn["click"])
if err != nil {
panic(err)
}
Clickhouse = db
}
2023-05-11 14:40:18 +03:00
func socketHandler() {
for {
select {
case b := <-socketServer:
conn, err := net.Dial("unix", "/tmp/echo.sock")
if err == nil {
conn.Write(b)
conn.Close()
}
}
}
}
2022-07-27 11:28:07 +03:00
func randInt(min int, max int) int {
return min + rand.Intn(max-min)
}
2022-08-07 14:18:21 +03:00
func fastStart() {
defer func() {
go updateFileRooms()
}()
dat, err := os.ReadFile(conf.Conn["start"])
if err != nil {
fmt.Println(err)
return
}
list := make(map[string]Info)
if err := json.Unmarshal(dat, &list); err != nil {
fmt.Println(err.Error())
return
}
now := time.Now().Unix()
for k, v := range list {
if now > v.Last+60*20 {
continue
}
fmt.Println("fastStart:", k, v.Server, v.Proxy)
workerData := Info{
room: k,
Server: v.Server,
Proxy: v.Proxy,
Online: v.Online,
Start: v.Start,
Last: now,
Rid: v.Rid,
Income: v.Income,
Dons: v.Dons,
Tips: v.Tips,
}
startRoom(workerData)
time.Sleep(2 * time.Second)
}
}