diff --git a/.gitignore b/.gitignore index 1896644..0c43e33 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ hemtt hemtt.exe *.biprivatekey *.bk + +releases/ diff --git a/README b/README index 4707a90..ff53ec3 100644 --- a/README +++ b/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 diff --git a/addons/main/script_version.hpp b/addons/main/script_version.hpp index 06131c6..298af03 100644 --- a/addons/main/script_version.hpp +++ b/addons/main/script_version.hpp @@ -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 \ No newline at end of file diff --git a/extension/AttendanceTracker/cmd.exe b/extension/AttendanceTracker/cmd.exe deleted file mode 100644 index 1693fc3..0000000 Binary files a/extension/AttendanceTracker/cmd.exe and /dev/null differ diff --git a/extension/AttendanceTracker/cmd/main.go b/extension/AttendanceTracker/cmd/main.go index 134fa1b..dc9b77c 100644 --- a/extension/AttendanceTracker/cmd/main.go +++ b/extension/AttendanceTracker/cmd/main.go @@ -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,56 +163,82 @@ func init() { }() } -func startA3CallHandlers() error { - go func() { - for { - select { - case <-RVExtensionChannels[":START:"]: - logger.Log.Trace().Msgf(`RVExtension :START: requested`) - if !initSuccess { - logger.Log.Warn().Msgf(`Received another :START: command before init was complete, ignoring.`) - continue - } else { - logger.RotateLogs() - a3interface.WriteArmaCallback( - EXTENSION_NAME, - ":READY:", - ) - } - case <-RVExtensionChannels[":MISSION:HASH:"]: - logger.Log.Trace().Msgf(`RVExtension :MISSION:HASH: requested`) - timestamp, hash := getMissionHash() - a3interface.WriteArmaCallback( - EXTENSION_NAME, - ":MISSION:HASH:", - timestamp, - hash, - ) - case <-RVExtensionChannels[":GET:SETTINGS:"]: - 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 - } - logger.Log.Trace().Str("armaConfig", armaConfig).Send() - a3interface.WriteArmaCallback( - EXTENSION_NAME, - ":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]) - } - } - }() +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.`) + return "Initing!", nil + } else { + logger.RotateLogs() + a3interface.WriteArmaCallback( + EXTENSION_NAME, + ":READY:", + ) + return "Ready!", nil + } +} - return nil +func onMissionHashCommand( + ctx a3interface.ArmaExtensionContext, + data string, +) (string, error) { + logger.Log.Trace().Msgf(`RVExtension :MISSION:HASH: requested`) + timestamp, hash := getMissionHash() + a3interface.WriteArmaCallback( + EXTENSION_NAME, + ":MISSION:HASH:", + timestamp, + hash, + ) + 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`) + return "", err + } + logger.Log.Trace().Str("armaConfig", armaConfig).Send() + a3interface.WriteArmaCallback( + EXTENSION_NAME, + ":GET:SETTINGS:", + armaConfig, + ) + return armaConfig, 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 diff --git a/extension/AttendanceTracker/go.mod b/extension/AttendanceTracker/go.mod index 820d0ca..6713e7c 100644 --- a/extension/AttendanceTracker/go.mod +++ b/extension/AttendanceTracker/go.mod @@ -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 diff --git a/extension/AttendanceTracker/go.sum b/extension/AttendanceTracker/go.sum index 9850599..81c8a7c 100644 --- a/extension/AttendanceTracker/go.sum +++ b/extension/AttendanceTracker/go.sum @@ -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= diff --git a/releases/attendancetracker-0.2.0.20231003-29228b.zip b/releases/attendancetracker-0.2.0.20231003-29228b.zip deleted file mode 100644 index c19a634..0000000 Binary files a/releases/attendancetracker-0.2.0.20231003-29228b.zip and /dev/null differ diff --git a/releases/attendancetracker-0.2.0.20231003-f2ad1b.zip b/releases/attendancetracker-0.2.0.20231003-f2ad1b.zip deleted file mode 100644 index df9bb22..0000000 Binary files a/releases/attendancetracker-0.2.0.20231003-f2ad1b.zip and /dev/null differ diff --git a/releases/attendancetracker-latest.zip b/releases/attendancetracker-latest.zip deleted file mode 100644 index df9bb22..0000000 Binary files a/releases/attendancetracker-latest.zip and /dev/null differ