This commit is contained in:
2026-07-21 03:55:57 +03:00
commit 15b428efec
39 changed files with 136724 additions and 0 deletions

45
cmd/Notes Executable file
View File

@@ -0,0 +1,45 @@
В обычном матче рынки типа Half 1, Half 2, corners попадают в поле SG. У каждой группы есть свой EC и EGC код.
Но некоторые матчи для Half 1, Half 2 заводят новые matchID. Опознать такие матчи можно по ответу:
{
"Error": "",
"ErrorCode": 0,
"Guid": "",
"Id": 0,
"Success": true,
"Value": {
"BIG": [
{
"I": 241207820,
"PN": "1 Half"
},
{
"I": 241207823,
"PN": "2 Half"
},
{
"I": 241207821,
"TG": "Corners"
},
{
"I": 241207822,
"PN": "1 Half",
"TG": "Corners"
},
{
"I": 241209140,
"TG": "Accumulator Outcomes"
},
{
"I": 241207815,
"TG": "Quick events"
},
{
"I": 241207816,
"TG": "Result + Total"
}
],
Если есть поле BIG - это комплексный матч. Поле PN - это название группы, I - это matchID.
Загрузив данные для Half1 следует искать все нужные рынки на топ уровне Value.GE, а не в массиве Value.SG

92
cmd/main.go Executable file
View File

@@ -0,0 +1,92 @@
package main
/*
Отписка от матча:
- метод Unwatch
- когда матч исчезнет из лайва
*/
import (
"log"
"os"
"os/signal"
"syscall"
"time"
"gordenko.dev/dima/onexbet"
"gordenko.dev/dima/onexbet/daemon"
"gordenko.dev/dima/web"
"gordenko.dev/dima/web/api"
"gordenko.dev/dima/web/router"
"gordenko.dev/dima/ws"
"gordenko.dev/dima/ws/publisher"
)
const (
port = 7772
dsn = "user:password@/tipper"
)
func main() {
wsServer, err := ws.NewPublicServer(ws.PublicServerOptions{
Logger: log.New(os.Stdout, "ws: ", log.LstdFlags),
LostConnectionTimeout: 1 * time.Minute,
Ping: true,
})
if err != nil {
log.Fatalf("ws.NewPublicServer: %s\n", err)
}
wsPublisher, err := publisher.NewPublicPublisher(publisher.PublicPublisherOptions{
WsPublicServer: wsServer,
})
if err != nil {
log.Fatalf("ws.NewPublicPublisher: %s\n", err)
}
//
logger := log.New(os.Stdout, "", log.LstdFlags)
d := daemon.New(daemon.Options{
Logger: logger,
SportIDs: []onexbet.OnexbetSport{
onexbet.Handball,
onexbet.Football,
onexbet.Tennis,
},
WsPublisher: wsPublisher,
})
wsServer.OnConnected(d.OnWsClientConnected)
publicAPI, err := api.NewAPI(api.Options{
Logger: logger,
})
publicAPI.PublicFunc("watch", d.Watch)
publicAPI.PublicFunc("unwatch", d.Unwatch)
//publicAPI.Handle("searchMatchCandidates", s.SearchMatchCandidates)
r := router.New()
r.PrefixHandle("/api", publicAPI)
r.Handle("/ws", wsServer)
app, err := web.NewApp(web.AppOptions{
Port: port,
Router: r,
})
if err != nil {
log.Fatalf("web.NewApp: %s\n", err)
}
go app.Run()
go d.Run()
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
<-sigs
logger.Println("daemon stopped.")
}