tappin/internal/clicker/clicker.go
Arthur Khachaturov e307989b9f
init: mvp
2024-08-17 01:20:24 +03:00

86 lines
1.6 KiB
Go

package clicker
import (
"net/http"
"net/http/cookiejar"
"net/url"
"sync"
"github.com/wzrayyy/tappin/internal/entity/boosts"
"github.com/wzrayyy/tappin/internal/entity/config"
"github.com/wzrayyy/tappin/internal/entity/upgrades"
"github.com/wzrayyy/tappin/internal/entity/user"
"golang.org/x/sync/errgroup"
)
type Clicker struct {
client *http.Client
authKey string
baseUrl *url.URL
clickerConfig *config.Response
user *user.Response
boosts *boosts.Response
upgrades *upgrades.Response
telegramUserID int
errorGroup errgroup.Group
locks struct {
User sync.RWMutex
Boosts sync.RWMutex
Config sync.RWMutex
Upgrades sync.RWMutex
}
channels struct {
Update EmptyChannel
Tap EmptyChannel
Upgrade EmptyChannel
Global EmptyChannel
}
Config Config
}
type Config struct {
UpdateFrequency int
TapsPerSecond int
TapInterval int
}
func NewClicker(auth_key string, user_id int, config Config) (*Clicker, error) {
c := new(Clicker)
var err error
c.client = new(http.Client)
c.client.Jar = new(cookiejar.Jar)
c.authKey = auth_key
c.telegramUserID = user_id
c.baseUrl, err = url.Parse(apiEndpoint)
if err != nil {
return c, err
}
c.Config = config
return c, c.Update()
}
func (c *Clicker) Tick() {
c.locks.Config.Lock()
c.clickerConfig.Tick()
c.locks.Config.Unlock()
c.locks.User.Lock()
c.user.Tick()
c.locks.User.Unlock()
c.locks.Boosts.Lock()
c.boosts.Tick()
c.locks.Boosts.Unlock()
c.locks.Upgrades.Lock()
c.upgrades.Tick()
c.locks.Upgrades.Unlock()
}