Skip to content

Commit

Permalink
Merge pull request #5 from ilbinek/extensionRewrite
Browse files Browse the repository at this point in the history
Extension rewrite
  • Loading branch information
ilbinek authored Oct 20, 2023
2 parents 6241c9d + 1bc0c8e commit c5886ee
Show file tree
Hide file tree
Showing 10 changed files with 424 additions and 176 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ hemtt.exe
*.biprivatekey

*.dll
*.so
*.so
*.exe
2 changes: 1 addition & 1 deletion .hemtt/project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ include=["mod.cpp", "LICENSE.md", "README.md", "*.dll", "*.so"]
path="addons/main/script_version.hpp" # Default

major=0 # Overrides path when set
minor=3
minor=4
patch=0
# build = 0 # Optional

Expand Down
6 changes: 3 additions & 3 deletions addons/main/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ class CfgPatches {
author = "ilbinek";
authors[] = {"ilbinek"};
url = "https://github.com/ilbinek/statsLogger";
version = 0.3;
versionStr = "0.3";
versionAr[] = {0, 3};
version = 0.4;
versionStr = "0.4";
versionAr[] = {0, 4};
requiredAddons[] = {};
requiredVersion = 2.04;
units[] = {};
Expand Down
5 changes: 4 additions & 1 deletion addons/main/functions/fn_init.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"Status",
(
"Stats Addon initialised<br/>" +
"Version 0.3<br/>" +
"Version 0.4<br/>" +
"Capture is running."
)
]
Expand Down Expand Up @@ -65,3 +65,6 @@ diag_log(text ('[STATS] Called Stats with ' + str(_tmp)));
diag_log(text ('[STATS] Starting FPS LOOP'));
call statslogger_fnc_fpsLoop;
diag_log(text ('[STATS] Started FPS LOOP'));


"stats_logger" callExtension ":SET:DEBUG:OFF:";
135 changes: 38 additions & 97 deletions extension/data.go
Original file line number Diff line number Diff line change
@@ -1,114 +1,55 @@
package main

import (
"sync"
"time"
)

type Mission struct {
mu sync.Mutex `json:"-"`
MissionName string `json:"missionName"`
Worldname string `json:"worldname"`
MissionAuthor string `json:"missionAuthor"`
MissionType string `json:"missionType"`
Victory string `json:"victory"`
MissionStart string `json:"missionStart"`
MissionEnd string `json:"missionEnd"`
Date string `json:"date"`
ScoreBlue string `json:"scoreBlue"`
ScoreRed string `json:"scoreRed"`
ScoreGreen string `json:"scoreGreen"`
Players []*Player `json:"players"`
Kills []*Kill `json:"kills"`
FPS []*FPSRecord `json:"fps"`
}

func (m *Mission) AddPlayer(p *Player) {
m.mu.Lock()
defer m.mu.Unlock()
m.Players = append(m.Players, p)
}

func (m *Mission) AddKill(k *Kill) {
m.mu.Lock()
defer m.mu.Unlock()
m.Kills = append(m.Kills, k)
}

func (m *Mission) AddFPS(f *FPSRecord) {
m.mu.Lock()
defer m.mu.Unlock()
m.FPS = append(m.FPS, f)
ID uint `json:"id" gorm:"primaryKey"` // Primary key
MissionName string `json:"missionName"`
Worldname string `json:"worldname"`
MissionAuthor string `json:"missionAuthor"`
MissionType string `json:"missionType"`
Victory string `json:"victory"`
MissionStart string `json:"missionStart"`
MissionEnd string `json:"missionEnd"`
Date string `json:"date"`
ScoreBlue string `json:"scoreBlue"`
ScoreRed string `json:"scoreRed"`
ScoreGreen string `json:"scoreGreen"`
Players []Player `json:"players"`
Kills []Kill `json:"kills"`
FPSRecords []FPSRecord `json:"fps"`
}

type Player struct {
mu sync.Mutex `json:"-"`
UID string `json:"uid"`
Name string `json:"name"`
Side string `json:"side"`
Shots int `json:"shots"`
Hits int `json:"hits"`
Kills int `json:"kills"`
Squad string `json:"squad"`
Role string `json:"role"`
Class string `json:"class"`
}

type PlayerUpdateOptions struct {
Name string `json:"name"`
Side string `json:"side"`
Squad string `json:"squad"`
Role string `json:"role"`
Class string `json:"class"`
}

func (p *Player) Update(options PlayerUpdateOptions) {
p.mu.Lock()
if options.Name != "" {
p.Name = options.Name
}
if options.Side != "" {
p.Side = options.Side
}
if options.Squad != "" {
p.Squad = options.Squad
}
if options.Role != "" {
p.Role = options.Role
}
if options.Class != "" {
p.Class = options.Class
}
p.mu.Unlock()
}

func (p *Player) AddShot() {
p.mu.Lock()
p.Shots++
p.mu.Unlock()
}

func (p *Player) AddHit() {
p.mu.Lock()
p.Hits++
p.mu.Unlock()
}

func (p *Player) AddKill() {
p.mu.Lock()
p.Kills++
p.mu.Unlock()
ID uint `json:"id" gorm:"uniqueIndex"`
PlayerUID string `json:"playerUID" gorm:"index"` // Player UID
Name string `json:"name"`
Side string `json:"side"`
Shots int `json:"shots"`
Hits int `json:"hits"`
Squad string `json:"squad"`
Role string `json:"role"`
Class string `json:"class"`
Mission *Mission `json:"-" gorm:"foreignKey:MissionID"`
MissionID uint `json:"-" gorm:"index"`
}

type Kill struct {
Time string `json:"time"`
Victim string `json:"victim"`
Killer string `json:"killer"`
Weapon string `json:"weapon"`
Distance string `json:"distance"`
ID uint `json:"id" gorm:"primaryKey"` // Primary key
Time string `json:"time"`
Victim string `json:"victim"`
Killer string `json:"killer"`
Weapon string `json:"weapon"`
Distance string `json:"distance"`
Mission *Mission `json:"-"`
MissionID uint `json:"-" gorm:"index"`
}

type FPSRecord struct {
TimeUTC time.Time `json:"timeUTC"`
FPS float64 `json:"fps"`
TimeUTC time.Time `json:"timeUTC" gorm:"primaryKey"` // Primary key
FPS float64 `json:"fps"`
Mission *Mission `json:"-"`
MissionID uint `json:"-" gorm:"index"`
}
35 changes: 35 additions & 0 deletions extension/db/db.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package db

import (
"path/filepath"

"github.com/indig0fox/a3go/assemblyfinder"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)

var db *gorm.DB
var configuredDbPath string = filepath.Join(
filepath.Dir(assemblyfinder.GetModulePath()),
"stats.db",
)

func Client() *gorm.DB {
if db == nil {
err := Connect(configuredDbPath)
if err != nil {
panic(err)
}
}
return db
}

func Connect(dbPath string) error {
var err error
configuredDbPath = dbPath
db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil {
return err
}
return nil
}
18 changes: 16 additions & 2 deletions extension/go.mod
Original file line number Diff line number Diff line change
@@ -1,5 +1,19 @@
module statsLoggerExtension
module github.com/ilbinek/statsLogger

go 1.20

require github.com/indig0fox/a3go v0.3.2
require (
github.com/indig0fox/a3go v0.3.2
github.com/rs/zerolog v1.31.0
gorm.io/driver/sqlite v1.5.4
gorm.io/gorm v1.25.5
)

require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/mattn/go-sqlite3 v1.14.17 // indirect
golang.org/x/sys v0.13.0 // indirect
)
30 changes: 28 additions & 2 deletions extension/go.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,30 @@
github.com/indig0fox/a3go v0.2.1 h1:Ixr/182pGd5qPbFYgHINWt5YtyKaO7Yo/va/17nF/Vg=
github.com/indig0fox/a3go v0.2.1/go.mod h1:8htVwBiIAVKpT1Jyb+5dm7GuLAAevTXgw7UKxSlOawY=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/indig0fox/a3go v0.3.2 h1:bNL90pffeOnS6Qtjoo5JHpdpZn1f0BZmRZR8nz/xcvQ=
github.com/indig0fox/a3go v0.3.2/go.mod h1:8htVwBiIAVKpT1Jyb+5dm7GuLAAevTXgw7UKxSlOawY=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gorm.io/driver/sqlite v1.5.4 h1:IqXwXi8M/ZlPzH/947tn5uik3aYQslP9BVveoax0nV0=
gorm.io/driver/sqlite v1.5.4/go.mod h1:qxAuCol+2r6PannQDpOP1FP6ag3mKi4esLnB/jHed+4=
gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
Loading

0 comments on commit c5886ee

Please sign in to comment.