Skip to content

Instantly share code, notes, and snippets.

@MaxBosse
Created July 10, 2017 22:51
Show Gist options
  • Save MaxBosse/4e7d8a512bc443a680d38c818c544b81 to your computer and use it in GitHub Desktop.
Save MaxBosse/4e7d8a512bc443a680d38c818c544b81 to your computer and use it in GitHub Desktop.
poc-launcher
package main
import (
"flag"
"net/url"
"os"
"os/signal"
"golang.org/x/sys/windows/registry"
"fmt"
"os/exec"
log "github.com/HeroesAwaken/GoAwaken/Log"
)
var (
// BuildTime of the build provided by the build command
BuildTime = "Not provided"
// GitHash of build provided by the build command
GitHash = "Not provided"
// GitBranch of the build provided by the build command
GitBranch = "Not provided"
// compileVersion we are receiving by the build command
CompileVersion = "0"
// Version of the Application
Version = "0.0.1"
)
func setUpRegistry() {
awakenRoot, _, err := registry.CreateKey(registry.CLASSES_ROOT, "awaken", registry.ALL_ACCESS)
if err != nil {
log.Fatal(err)
}
defer awakenRoot.Close()
err = awakenRoot.SetStringValue("", "URL: Awaken Protocol")
if err != nil {
log.Fatal(err)
}
err = awakenRoot.SetStringValue("URL Protocol", "")
if err != nil {
log.Fatal(err)
}
openCommand, _, err := registry.CreateKey(awakenRoot, "shell\\open\\command", registry.ALL_ACCESS)
if err != nil {
log.Fatal(err)
}
defer openCommand.Close()
executablePath, err := os.Executable()
if err != nil {
log.Fatal(err)
}
openCommand.SetStringValue("", "\""+executablePath+"\" \"%1\"")
}
func startGame(u *url.URL) {
m, _ := url.ParseQuery(u.RawQuery)
sessionID := m["sessionId"][0]
cmd := exec.Command(".\\game\\BFHeroes.exe", "+magma 0", "+sessionId "+sessionID)
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
log.Noteln("Waiting for command to finish...")
err = cmd.Wait()
log.Notef("Command finished with error: %v", err)
}
func end() {
log.Noteln("Done.")
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
for sig := range c {
log.Noteln("Captured" + sig.String() + ". Shutting down.")
os.Exit(0)
}
}
func main() {
var (
logLevel = flag.String("logLevel", "error", "LogLevel [error|warning|note|debug]")
)
flag.Parse()
fmt.Println(os.Args)
if CompileVersion != "0" {
Version = Version + "." + CompileVersion
}
log.SetLevel(*logLevel)
log.Notef("Starting up v%s - %s %s %s", Version, BuildTime, GitBranch, GitHash)
fmt.Println("Started using ", flag.Args(), len(flag.Args()))
// Startup done
if len(flag.Args()) == 0 {
setUpRegistry()
end()
return
}
sArgs := flag.Args()
u, err := url.Parse(sArgs[0])
if err != nil {
log.Errorln(err)
return
}
if u.Scheme != "awaken" {
log.Errorln("Wrong Scheme.")
return
}
switch u.Host {
case "game":
switch u.Path {
case "/start":
startGame(u)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment