1st
This commit is contained in:
45
cmd/Notes
Executable file
45
cmd/Notes
Executable 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
92
cmd/main.go
Executable 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.")
|
||||
}
|
||||
Reference in New Issue
Block a user