mirror of
https://github.com/indig0fox/Arma3-AttendanceTracker.git/
synced 2025-12-08 09:51:47 -06:00
Compare commits
2 Commits
796f2e6818
...
1892805fe9
| Author | SHA1 | Date | |
|---|---|---|---|
|
1892805fe9
|
|||
|
5dc3b5cb03
|
2
.gitignore
vendored
2
.gitignore
vendored
@@ -9,3 +9,5 @@ hemtt
|
||||
hemtt.exe
|
||||
*.biprivatekey
|
||||
*.bk
|
||||
|
||||
releases/
|
||||
|
||||
10
README
10
README
@@ -204,24 +204,24 @@ docker pull x1unix/go-mingw:1.20
|
||||
|
||||
# version is semantic + build date + git hash
|
||||
# e.g. 1.0.0-2021-05-30-1a2b3c4d
|
||||
$versionSem = '0.2.0'
|
||||
$versionSem = '1.1.0'
|
||||
$dateStr = Get-Date -Format 'yyyyMMdd'
|
||||
$version = "$versionSem-$dateStr-$(git rev-parse --short HEAD)"
|
||||
|
||||
# Compile x64 Windows DLL
|
||||
docker run --rm -it -v ${PWD}:/go/work -w /go/work x1unix/go-mingw:1.20 go build -o dist/AttendanceTracker_x64.dll -buildmode=c-shared -ldflags "-w -s -X main.EXTENSION_VERSION=$version" ./cmd
|
||||
docker run --rm -it -v ${PWD}:/go/work -w /go/work -e GOARCH=amd64 -e CGO_ENABLED=1 x1unix/go-mingw:1.20 go build -o dist/AttendanceTracker_x64.dll -buildmode=c-shared -ldflags "-w -s -X main.EXTENSION_VERSION=$version" ./cmd
|
||||
|
||||
# Compile x86 Windows DLL
|
||||
docker run --rm -it -v ${PWD}:/go/work -w /go/work -e GOARCH=386 x1unix/go-mingw:1.20 go build -o dist/AttendanceTracker.dll -buildmode=c-shared -ldflags "-w -s -X main.EXTENSION_VERSION=$version" ./cmd
|
||||
docker run --rm -it -v ${PWD}:/go/work -w /go/work -e GOARCH=386 -e CGO_ENABLED=1 x1unix/go-mingw:1.20 go build -o dist/AttendanceTracker.dll -buildmode=c-shared -ldflags "-w -s -X main.EXTENSION_VERSION=$version" ./cmd
|
||||
|
||||
# Compile x64 Windows EXE
|
||||
docker run --rm -it -v ${PWD}:/go/work -w /go/work x1unix/go-mingw:1.20 go build -o dist/AttendanceTracker_x64.exe -ldflags "-w -s -X main.EXTENSION_VERSION=$version" ./cmd
|
||||
docker run --rm -it -v ${PWD}:/go/work -w /go/work -e GOARCH=amd64 -e CGO_ENABLED=1 x1unix/go-mingw:1.20 go build -o dist/AttendanceTracker_x64.exe -ldflags "-w -s -X main.EXTENSION_VERSION=$version" ./cmd
|
||||
```
|
||||
|
||||
#### COMPILING FOR LINUX
|
||||
|
||||
```bash
|
||||
docker build -t indifox926/build-a3go:linux-so -f ./build/Dockerfile.build ./cmd
|
||||
docker build -t indifox926/build-a3go:linux-so -f ./build/Dockerfile.build .
|
||||
|
||||
# Compile x64 Linux .so
|
||||
docker run --rm -it -v ${PWD}:/app -e GOOS=linux -e GOARCH=amd64 -e CGO_ENABLED=1 -e CC=gcc indifox926/build-a3go:linux-so go build -o dist/AttendanceTracker_x64.so -linkshared -ldflags "-w -s -X main.EXTENSION_VERSION=$version" ./cmd
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#define MAJOR 0
|
||||
#define MINOR 2
|
||||
#define MAJOR 1
|
||||
#define MINOR 1
|
||||
#define PATCH 0
|
||||
#define BUILD 20231003
|
||||
|
||||
#define VERSION 0.2
|
||||
#define VERSION 1.1
|
||||
#define VERSION_STR MAJOR##.##MINOR##.##PATCH##.##BUILD
|
||||
#define VERSION_AR MAJOR,MINOR,PATCH,BUILD
|
||||
11
extension/AttendanceTracker/build/Dockerfile.build
Normal file
11
extension/AttendanceTracker/build/Dockerfile.build
Normal file
@@ -0,0 +1,11 @@
|
||||
# build Golang app for Linux
|
||||
FROM golang:1.20
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# get gcc-multilib and gcc-mingw-w64
|
||||
RUN apt update
|
||||
RUN apt install -y gcc-multilib gcc-mingw-w64
|
||||
|
||||
CMD ["/bin/sh"]
|
||||
|
||||
Binary file not shown.
@@ -57,8 +57,35 @@ var (
|
||||
func init() {
|
||||
|
||||
a3interface.SetVersion(EXTENSION_VERSION)
|
||||
a3interface.RegisterRvExtensionChannels(RVExtensionChannels)
|
||||
a3interface.RegisterRvExtensionArgsChannels(RVExtensionArgsChannels)
|
||||
a3interface.NewRegistration(":START:").
|
||||
SetDefaultResponse(`["Extension beginning init process"]`).
|
||||
SetFunction(onStartCommand).
|
||||
SetRunInBackground(true).
|
||||
Register()
|
||||
|
||||
a3interface.NewRegistration(":MISSION:HASH:").
|
||||
SetDefaultResponse(`["Retrieving mission hash"]`).
|
||||
SetFunction(onMissionHashCommand).
|
||||
SetRunInBackground(true).
|
||||
Register()
|
||||
|
||||
a3interface.NewRegistration(":GET:SETTINGS:").
|
||||
SetDefaultResponse(`["Retrieving settings"]`).
|
||||
SetFunction(onGetSettingsCommand).
|
||||
SetRunInBackground(true).
|
||||
Register()
|
||||
|
||||
a3interface.NewRegistration(":LOG:MISSION:").
|
||||
SetDefaultResponse(`["Logging mission data"]`).
|
||||
SetArgsFunction(onLogMissionArgsCommand).
|
||||
SetRunInBackground(true).
|
||||
Register()
|
||||
|
||||
a3interface.NewRegistration(":LOG:PRESENCE:").
|
||||
SetDefaultResponse(`["Logging presence data"]`).
|
||||
SetArgsFunction(onLogPresenceArgsCommand).
|
||||
SetRunInBackground(true).
|
||||
Register()
|
||||
|
||||
go func() {
|
||||
var err error
|
||||
@@ -126,8 +153,6 @@ func init() {
|
||||
logger.Log.Error().Err(err).Msgf(`Error migrating database schema`)
|
||||
}
|
||||
|
||||
startA3CallHandlers()
|
||||
|
||||
initSuccess = true
|
||||
a3interface.WriteArmaCallback(
|
||||
EXTENSION_NAME,
|
||||
@@ -138,23 +163,28 @@ func init() {
|
||||
}()
|
||||
}
|
||||
|
||||
func startA3CallHandlers() error {
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case <-RVExtensionChannels[":START:"]:
|
||||
func onStartCommand(
|
||||
ctx a3interface.ArmaExtensionContext,
|
||||
data string,
|
||||
) (string, error) {
|
||||
logger.Log.Trace().Msgf(`RVExtension :START: requested`)
|
||||
if !initSuccess {
|
||||
logger.Log.Warn().Msgf(`Received another :START: command before init was complete, ignoring.`)
|
||||
continue
|
||||
return "Initing!", nil
|
||||
} else {
|
||||
logger.RotateLogs()
|
||||
a3interface.WriteArmaCallback(
|
||||
EXTENSION_NAME,
|
||||
":READY:",
|
||||
)
|
||||
return "Ready!", nil
|
||||
}
|
||||
case <-RVExtensionChannels[":MISSION:HASH:"]:
|
||||
}
|
||||
|
||||
func onMissionHashCommand(
|
||||
ctx a3interface.ArmaExtensionContext,
|
||||
data string,
|
||||
) (string, error) {
|
||||
logger.Log.Trace().Msgf(`RVExtension :MISSION:HASH: requested`)
|
||||
timestamp, hash := getMissionHash()
|
||||
a3interface.WriteArmaCallback(
|
||||
@@ -163,12 +193,22 @@ func startA3CallHandlers() error {
|
||||
timestamp,
|
||||
hash,
|
||||
)
|
||||
case <-RVExtensionChannels[":GET:SETTINGS:"]:
|
||||
return fmt.Sprintf(
|
||||
`[%q, %q]`,
|
||||
timestamp,
|
||||
hash,
|
||||
), nil
|
||||
}
|
||||
|
||||
func onGetSettingsCommand(
|
||||
ctx a3interface.ArmaExtensionContext,
|
||||
data string,
|
||||
) (string, error) {
|
||||
logger.Log.Trace().Msg(`Settings requested`)
|
||||
armaConfig, err := util.ConfigArmaFormat()
|
||||
if err != nil {
|
||||
logger.Log.Error().Err(err).Msg(`Error when marshaling arma config`)
|
||||
continue
|
||||
return "", err
|
||||
}
|
||||
logger.Log.Trace().Str("armaConfig", armaConfig).Send()
|
||||
a3interface.WriteArmaCallback(
|
||||
@@ -176,18 +216,29 @@ func startA3CallHandlers() error {
|
||||
":GET:SETTINGS:",
|
||||
armaConfig,
|
||||
)
|
||||
case v := <-RVExtensionArgsChannels[":LOG:MISSION:"]:
|
||||
go func(data []string) {
|
||||
writeWorldInfo(v[1])
|
||||
writeMission(v[0])
|
||||
}(v)
|
||||
case v := <-RVExtensionArgsChannels[":LOG:PRESENCE:"]:
|
||||
go writeAttendance(v[0])
|
||||
}
|
||||
}
|
||||
}()
|
||||
return armaConfig, nil
|
||||
}
|
||||
|
||||
return nil
|
||||
func onLogMissionArgsCommand(
|
||||
ctx a3interface.ArmaExtensionContext,
|
||||
command string,
|
||||
args []string,
|
||||
) (string, error) {
|
||||
go func(data []string) {
|
||||
writeWorldInfo(data[1])
|
||||
writeMission(data[0])
|
||||
}(args)
|
||||
|
||||
return `["Logging mission data"]`, nil
|
||||
}
|
||||
|
||||
func onLogPresenceArgsCommand(
|
||||
ctx a3interface.ArmaExtensionContext,
|
||||
command string,
|
||||
args []string,
|
||||
) (string, error) {
|
||||
go writeAttendance(args[0])
|
||||
return `["Logging presence data"]`, nil
|
||||
}
|
||||
|
||||
// getMissionHash will return the current time in UTC and an md5 hash of that time
|
||||
@@ -313,8 +364,8 @@ func writeAttendance(data string) {
|
||||
var dbEvent Session
|
||||
db.Client().
|
||||
Where(
|
||||
"player_uid = ? AND mission_hash = ?",
|
||||
event.PlayerUID,
|
||||
"player_id = ? AND mission_hash = ?",
|
||||
event.PlayerId,
|
||||
event.MissionHash,
|
||||
).
|
||||
Order("join_time_utc desc").
|
||||
|
||||
@@ -4,7 +4,7 @@ go 1.20
|
||||
|
||||
require (
|
||||
github.com/go-sql-driver/mysql v1.7.1
|
||||
github.com/indig0fox/a3go v0.2.0
|
||||
github.com/indig0fox/a3go v0.3.1
|
||||
github.com/rs/zerolog v1.30.0
|
||||
github.com/spf13/viper v1.16.0
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1
|
||||
|
||||
@@ -127,8 +127,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||
github.com/indig0fox/a3go v0.2.0 h1:2r1fyUePCH9KLMBzVXBigkQT2zS39mpHZAm5egmIrNk=
|
||||
github.com/indig0fox/a3go v0.2.0/go.mod h1:8htVwBiIAVKpT1Jyb+5dm7GuLAAevTXgw7UKxSlOawY=
|
||||
github.com/indig0fox/a3go v0.3.1 h1:T1UxVrk7oicM5djyID+ppNuTc+0pEGbbGWS466eS29k=
|
||||
github.com/indig0fox/a3go v0.3.1/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=
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user