From cec0aae8e34666306e7c3a2351fc12963996a3cf Mon Sep 17 00:00:00 2001 From: GeekROS <15300555770> Date: Sun, 3 Mar 2024 22:59:18 +0800 Subject: [PATCH] Initial commit --- .gitignore | 17 ++ desktop/framework/config/config.go | 34 +++ desktop/framework/framework.go | 62 +++++ desktop/framework/windows/start/index.go | 74 ++++++ desktop/go.mod | 43 ++++ desktop/go.sum | 104 ++++++++ desktop/main.go | 26 ++ desktop/template/index.html | 15 ++ desktop/template/package.json | 33 +++ desktop/template/package.json.md5 | 1 + desktop/template/public/favicon.ico | Bin 0 -> 21582 bytes desktop/template/public/static/image/logo.png | Bin 0 -> 20364 bytes desktop/template/src/app.vue | 36 +++ desktop/template/src/assets/css/base.scss | 55 ++++ desktop/template/src/main.ts | 42 ++++ .../package/wailsjs/go/StartWindows/Api.d.ts | 6 + .../package/wailsjs/go/StartWindows/Api.js | 11 + .../src/package/wailsjs/runtime/package.json | 24 ++ .../src/package/wailsjs/runtime/runtime.d.ts | 235 ++++++++++++++++++ .../src/package/wailsjs/runtime/runtime.js | 202 +++++++++++++++ desktop/template/src/router/index.ts | 15 ++ desktop/template/src/vite-env.d.ts | 7 + desktop/template/src/windows/start.vue | 45 ++++ desktop/template/tsconfig.json | 33 +++ desktop/template/tsconfig.node.json | 14 ++ desktop/template/vite.config.ts | 17 ++ desktop/wails.json | 24 ++ engine/assets/icon.svg | 1 + engine/assets/icon.svg.import | 37 +++ engine/assets/launch/background.jpeg | Bin 0 -> 220025 bytes engine/assets/launch/background.jpeg.import | 34 +++ engine/project.godot | 40 +++ engine/scenes/launch/launch.tscn | 22 ++ engine/scripts/framework/client/client.gd | 28 +++ engine/scripts/framework/global.gd | 53 ++++ engine/scripts/framework/server/server.gd | 29 +++ engine/scripts/framework/utils/request.gd | 30 +++ readme.md | 49 ++++ server/framework/config/config.go | 52 ++++ server/framework/controller/controller.go | 61 +++++ server/framework/controller/ping/ping.go | 18 ++ server/framework/database/database.go | 74 ++++++ server/framework/database/interface.go | 65 +++++ server/framework/framework.go | 23 ++ server/framework/utils/empty_data.go | 3 + server/framework/utils/hashids.go | 27 ++ server/framework/utils/header.go | 49 ++++ server/framework/utils/mailbox.go | 17 ++ server/framework/utils/markdown.go | 27 ++ server/framework/utils/md5.go | 22 ++ server/framework/utils/order.go | 18 ++ server/framework/utils/phone.go | 69 +++++ server/framework/utils/price.go | 7 + server/framework/utils/rand.go | 20 ++ server/framework/utils/return.go | 105 ++++++++ server/framework/utils/time.go | 33 +++ server/go.mod | 42 ++++ server/go.sum | 126 ++++++++++ server/main.go | 15 ++ tools/centos/data/wwwroot/default/index.html | 0 .../etc/nginx/conf.d/game.makeryang.com.conf | 41 +++ tools/centos/etc/nginx/nginx.conf | 30 +++ .../etc/nginx/ssl/game.makeryang.com.key | 27 ++ .../etc/nginx/ssl/game.makeryang.com.pem | 61 +++++ tools/centos/etc/systemd/system/game.service | 13 + .../centos/etc/systemd/system/server.service | 12 + tools/update.sh | 27 ++ update.bat | 5 + wiki/course/0001.md | 100 ++++++++ 69 files changed, 2687 insertions(+) create mode 100644 .gitignore create mode 100644 desktop/framework/config/config.go create mode 100644 desktop/framework/framework.go create mode 100644 desktop/framework/windows/start/index.go create mode 100644 desktop/go.mod create mode 100644 desktop/go.sum create mode 100644 desktop/main.go create mode 100644 desktop/template/index.html create mode 100644 desktop/template/package.json create mode 100644 desktop/template/package.json.md5 create mode 100644 desktop/template/public/favicon.ico create mode 100644 desktop/template/public/static/image/logo.png create mode 100644 desktop/template/src/app.vue create mode 100644 desktop/template/src/assets/css/base.scss create mode 100644 desktop/template/src/main.ts create mode 100644 desktop/template/src/package/wailsjs/go/StartWindows/Api.d.ts create mode 100644 desktop/template/src/package/wailsjs/go/StartWindows/Api.js create mode 100644 desktop/template/src/package/wailsjs/runtime/package.json create mode 100644 desktop/template/src/package/wailsjs/runtime/runtime.d.ts create mode 100644 desktop/template/src/package/wailsjs/runtime/runtime.js create mode 100644 desktop/template/src/router/index.ts create mode 100644 desktop/template/src/vite-env.d.ts create mode 100644 desktop/template/src/windows/start.vue create mode 100644 desktop/template/tsconfig.json create mode 100644 desktop/template/tsconfig.node.json create mode 100644 desktop/template/vite.config.ts create mode 100644 desktop/wails.json create mode 100644 engine/assets/icon.svg create mode 100644 engine/assets/icon.svg.import create mode 100644 engine/assets/launch/background.jpeg create mode 100644 engine/assets/launch/background.jpeg.import create mode 100644 engine/project.godot create mode 100644 engine/scenes/launch/launch.tscn create mode 100644 engine/scripts/framework/client/client.gd create mode 100644 engine/scripts/framework/global.gd create mode 100644 engine/scripts/framework/server/server.gd create mode 100644 engine/scripts/framework/utils/request.gd create mode 100644 readme.md create mode 100644 server/framework/config/config.go create mode 100644 server/framework/controller/controller.go create mode 100644 server/framework/controller/ping/ping.go create mode 100644 server/framework/database/database.go create mode 100644 server/framework/database/interface.go create mode 100644 server/framework/framework.go create mode 100644 server/framework/utils/empty_data.go create mode 100644 server/framework/utils/hashids.go create mode 100644 server/framework/utils/header.go create mode 100644 server/framework/utils/mailbox.go create mode 100644 server/framework/utils/markdown.go create mode 100644 server/framework/utils/md5.go create mode 100644 server/framework/utils/order.go create mode 100644 server/framework/utils/phone.go create mode 100644 server/framework/utils/price.go create mode 100644 server/framework/utils/rand.go create mode 100644 server/framework/utils/return.go create mode 100644 server/framework/utils/time.go create mode 100644 server/go.mod create mode 100644 server/go.sum create mode 100644 server/main.go create mode 100644 tools/centos/data/wwwroot/default/index.html create mode 100644 tools/centos/etc/nginx/conf.d/game.makeryang.com.conf create mode 100644 tools/centos/etc/nginx/nginx.conf create mode 100644 tools/centos/etc/nginx/ssl/game.makeryang.com.key create mode 100644 tools/centos/etc/nginx/ssl/game.makeryang.com.pem create mode 100644 tools/centos/etc/systemd/system/game.service create mode 100644 tools/centos/etc/systemd/system/server.service create mode 100755 tools/update.sh create mode 100644 update.bat create mode 100644 wiki/course/0001.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bf098f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +.idea +.DS* +.git +.vscode +.godot +*.cfg +*.tmp +desktop/release +!desktop/release/appicon.png +desktop/template/yarn.lock +desktop/template/yarn-error.log +desktop/template/node_modules +desktop/template/dist +engine/release +engine/runtime +!engine/release/.gitkeep +!engine/runtime/.gitkeep \ No newline at end of file diff --git a/desktop/framework/config/config.go b/desktop/framework/config/config.go new file mode 100644 index 0000000..2e20d66 --- /dev/null +++ b/desktop/framework/config/config.go @@ -0,0 +1,34 @@ +/** + ****************************************************************************** + * @file config.go + * @author MakerYang + ****************************************************************************** + */ + +package Config + +import ( + "embed" + "encoding/json" + "golang.org/x/sync/errgroup" +) + +var Get = &Data{} + +type Data struct { + Info struct { + CompanyName string `json:"companyName"` + ProductName string `json:"productName"` + ProductVersion string `json:"productVersion"` + } `json:"info"` + Group errgroup.Group +} + +func Init(version embed.FS) { + wails, _ := version.ReadFile("wails.json") + var wailsJson Data + json.Unmarshal(wails, &wailsJson) + Get.Info.ProductVersion = wailsJson.Info.ProductVersion + Get.Info.ProductName = wailsJson.Info.ProductName + Get.Info.CompanyName = wailsJson.Info.CompanyName +} diff --git a/desktop/framework/framework.go b/desktop/framework/framework.go new file mode 100644 index 0000000..738a3e6 --- /dev/null +++ b/desktop/framework/framework.go @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * @file framework.go + * @author MakerYang + ****************************************************************************** + */ + +package Framework + +import ( + "cnc/framework/config" + "cnc/framework/windows/start" + "embed" + "fmt" + "github.com/gookit/color" + "github.com/wailsapp/wails/v2" + "github.com/wailsapp/wails/v2/pkg/options" + "github.com/wailsapp/wails/v2/pkg/options/assetserver" + "github.com/wailsapp/wails/v2/pkg/options/linux" + "github.com/wailsapp/wails/v2/pkg/options/windows" +) + +func Init(template embed.FS, version embed.FS) { + + Config.Init(version) + + start := StartWindows.Init() + + err := wails.Run(&options.App{ + Title: "", + Width: 1200, + Height: 768, + MinWidth: 1200, + MinHeight: 768, + AssetServer: &assetserver.Options{ + Assets: template, + }, + BackgroundColour: &options.RGBA{R: 255, G: 255, B: 255, A: 1}, + OnStartup: start.Startup, + OnShutdown: start.Shutdown, + Bind: []interface{}{ + start, + }, + WindowStartState: options.Normal, + Windows: &windows.Options{ + WebviewDisableRendererCodeIntegrity: true, + DisableWindowIcon: true, + }, + Linux: &linux.Options{ + Icon: []byte(""), + WindowIsTranslucent: false, + WebviewGpuPolicy: linux.WebviewGpuPolicyNever, + }, + Debug: options.Debug{ + OpenInspectorOnStartup: false, + }, + }) + + if err != nil { + fmt.Println("[desktop][framework]:" + color.Gray.Text(err.Error())) + } +} diff --git a/desktop/framework/windows/start/index.go b/desktop/framework/windows/start/index.go new file mode 100644 index 0000000..0dda9b0 --- /dev/null +++ b/desktop/framework/windows/start/index.go @@ -0,0 +1,74 @@ +/** + ****************************************************************************** + * @file index.go + * @author MakerYang + ****************************************************************************** + */ + +package StartWindows + +import ( + "cnc/framework/config" + "context" + "os" + "runtime" + "strings" +) + +type Api struct { + ctx context.Context +} + +type ReturnResponse struct { + Code int `json:"code"` + Data interface{} `json:"data"` + Msg string `json:"msg"` +} + +func Init() *Api { + return &Api{} +} + +func (start *Api) Startup(ctx context.Context) { + start.ctx = ctx +} + +func (start *Api) Shutdown(ctx context.Context) { + +} + +func (start *Api) GetPlatform() string { + platform := "" + switch runtime.GOOS { + case "windows": + platform = "Windows" + case "darwin": + platform = "Darwin" + case "linux": + platform = "Linux" + content, err := os.ReadFile("/etc/os-release") + if err == nil { + lines := strings.Split(string(content), "\n") + for _, line := range lines { + if strings.HasPrefix(line, "ID=") { + switch { + case strings.Contains(line, "ubuntu"): + platform = "Ubuntu" + case strings.Contains(line, "debian"): + platform = "Debian" + default: + platform = "Linux" + } + } + } + } + default: + platform = "-" + } + + return platform +} + +func (start *Api) GetVersion() []string { + return []string{Config.Get.Info.ProductName, Config.Get.Info.ProductVersion} +} diff --git a/desktop/go.mod b/desktop/go.mod new file mode 100644 index 0000000..a89aa39 --- /dev/null +++ b/desktop/go.mod @@ -0,0 +1,43 @@ +module cnc + +go 1.18 + +require ( + github.com/gookit/color v1.5.2 + github.com/wailsapp/wails/v2 v2.7.1 + golang.org/x/sync v0.5.0 +) + +require ( + github.com/bep/debounce v1.2.1 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect + github.com/labstack/echo/v4 v4.10.2 // indirect + github.com/labstack/gommon v0.4.0 // indirect + github.com/leaanthony/go-ansi-parser v1.6.0 // indirect + github.com/leaanthony/gosod v1.0.3 // indirect + github.com/leaanthony/slicer v1.6.0 // indirect + github.com/leaanthony/u v1.1.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/samber/lo v1.38.1 // indirect + github.com/stretchr/testify v1.8.3 // indirect + github.com/tkrajina/go-reflector v0.5.6 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasttemplate v1.2.2 // indirect + github.com/wailsapp/go-webview2 v1.0.10 // indirect + github.com/wailsapp/mimetype v1.4.1 // indirect + github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect +) + +// replace github.com/wailsapp/wails/v2 v2.3.1 => C:\Users\admin\go\pkg\mod diff --git a/desktop/go.sum b/desktop/go.sum new file mode 100644 index 0000000..310aa18 --- /dev/null +++ b/desktop/go.sum @@ -0,0 +1,104 @@ +github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= +github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gookit/color v1.5.2 h1:uLnfXcaFjlrDnQDT+NCBcfhrXqYTx/rcCa6xn01Y8yI= +github.com/gookit/color v1.5.2/go.mod h1:w8h4bGiHeeBpvQVePTutdbERIUf3oJE5lZ8HM0UgXyg= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= +github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= +github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN2M= +github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= +github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= +github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= +github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= +github.com/leaanthony/go-ansi-parser v1.6.0 h1:T8TuMhFB6TUMIUm0oRrSbgJudTFw9csT3ZK09w0t4Pg= +github.com/leaanthony/go-ansi-parser v1.6.0/go.mod h1:+vva/2y4alzVmmIEpk9QDhA7vLC5zKDTRwfZGOp3IWU= +github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aTQ= +github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= +github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= +github.com/leaanthony/slicer v1.6.0 h1:1RFP5uiPJvT93TAHi+ipd3NACobkW53yUiBqZheE/Js= +github.com/leaanthony/slicer v1.6.0/go.mod h1:o/Iz29g7LN0GqH3aMjWAe90381nyZlDNquK+mtH2Fj8= +github.com/leaanthony/u v1.1.0 h1:2n0d2BwPVXSUq5yhe8lJPHdxevE2qK5G99PMStMZMaI= +github.com/leaanthony/u v1.1.0/go.mod h1:9+o6hejoRljvZ3BzdYlVL0JYCwtnAsVuN9pVTQcaRfI= +github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= +github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +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.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +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/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM= +github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tkrajina/go-reflector v0.5.6 h1:hKQ0gyocG7vgMD2M3dRlYN6WBBOmdoOzJ6njQSepKdE= +github.com/tkrajina/go-reflector v0.5.6/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= +github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/wailsapp/go-webview2 v1.0.10 h1:PP5Hug6pnQEAhfRzLCoOh2jJaPdrqeRgJKZhyYyDV/w= +github.com/wailsapp/go-webview2 v1.0.10/go.mod h1:Uk2BePfCRzttBBjFrBmqKGJd41P6QIHeV9kTgIeOZNo= +github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= +github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= +github.com/wailsapp/wails/v2 v2.7.1 h1:HAzp2c5ODOzsLC6ZMDVtNOB72ozM7/SJecJPB2Ur+UU= +github.com/wailsapp/wails/v2 v2.7.1/go.mod h1:oIJVwwso5fdOgprBYWXBBqtx6PaSvxg8/KTQHNGkadc= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +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.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/desktop/main.go b/desktop/main.go new file mode 100644 index 0000000..0ab2cbd --- /dev/null +++ b/desktop/main.go @@ -0,0 +1,26 @@ +/** + ****************************************************************************** + * @file main.go + * @author Makeryang + ****************************************************************************** + */ + +package main + +import ( + "cnc/framework" + "embed" + "fmt" + "github.com/gookit/color" +) + +//go:embed all:template/dist +var Template embed.FS + +//go:embed all:wails.json +var VersionInfo embed.FS + +func main() { + fmt.Println("[desktop][main]:" + color.Gray.Text("starting...")) + Framework.Init(Template, VersionInfo) +} diff --git a/desktop/template/index.html b/desktop/template/index.html new file mode 100644 index 0000000..ca27fbe --- /dev/null +++ b/desktop/template/index.html @@ -0,0 +1,15 @@ + + + + + + + Index + + + +
+ + + + \ No newline at end of file diff --git a/desktop/template/package.json b/desktop/template/package.json new file mode 100644 index 0000000..ab696a8 --- /dev/null +++ b/desktop/template/package.json @@ -0,0 +1,33 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "scripts": { + "dev": "vite", + "rebuild": "node-gyp rebuild", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview" + }, + "engines": { + "node": ">=18" + }, + "dependencies": { + "@element-plus/icons": "^0.0.11", + "@element-plus/icons-vue": "^2.0.9", + "axios": "^0.27.2", + "element-plus": "2.3.7", + "uuid": "^9.0.0", + "vue": "3.2.37", + "vue-router": "4.1.5" + }, + "devDependencies": { + "@babel/types": "^7.18.10", + "@types/react": "^18.2.56", + "@types/node": "^18.11.18", + "@vitejs/plugin-vue": "^3.0.3", + "@vue/tsconfig": "0.1.3", + "typescript": "4.6.4", + "vite": "3.0.7", + "vue-tsc": "0.39.5" + } +} diff --git a/desktop/template/package.json.md5 b/desktop/template/package.json.md5 new file mode 100644 index 0000000..b14fe42 --- /dev/null +++ b/desktop/template/package.json.md5 @@ -0,0 +1 @@ +d24d6b406b5af24715d4d957ed80e892 \ No newline at end of file diff --git a/desktop/template/public/favicon.ico b/desktop/template/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2322d3146cb98e35544e65da1f717d11a2acf674 GIT binary patch literal 21582 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 literal 0 HcmV?d00001 diff --git a/desktop/template/public/static/image/logo.png b/desktop/template/public/static/image/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..77103bf8b9578617cadebe95b6637ada7f2a696b GIT binary patch literal 20364 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 literal 0 HcmV?d00001 diff --git a/desktop/template/src/app.vue b/desktop/template/src/app.vue new file mode 100644 index 0000000..0ab1a1f --- /dev/null +++ b/desktop/template/src/app.vue @@ -0,0 +1,36 @@ + + + + + diff --git a/desktop/template/src/assets/css/base.scss b/desktop/template/src/assets/css/base.scss new file mode 100644 index 0000000..10fede8 --- /dev/null +++ b/desktop/template/src/assets/css/base.scss @@ -0,0 +1,55 @@ +@charset "UTF-8"; + +* { + box-sizing: border-box; + -webkit-tap-highlight-color: transparent; + -webkit-appearance: none; + -webkit-touch-callout: none; + outline: none; + user-select: none; + margin: 0; + padding: 0; +} + +body { + font-family: Inter, sans-serif; + font-feature-settings: "tnum"; + font-variant: tabular-nums; + -webkit-font-smoothing: antialiased; + font-size: 12px; + color: #666666; +} + +ul li, ol li { + list-style: none; +} + +::-webkit-scrollbar { + width: 3px; + height: 3px; +} +::-webkit-scrollbar-thumb { + border-radius: 0; + box-shadow: inset 0 0 3px rgba(68, 68, 71, 1); + background: rgba(68, 68, 71, .5); +} +::-webkit-scrollbar-track{ + box-shadow: none; + border-radius: 0; + background: rgba(68, 68, 71, 0); +} + +*:focus { + outline: none !important; +} + +.page-main{ + width: 100%; + height: 100%; + position: fixed; + z-index: 1; + top: 0; + left: 0; + right: 0; + bottom: 0; +} \ No newline at end of file diff --git a/desktop/template/src/main.ts b/desktop/template/src/main.ts new file mode 100644 index 0000000..6e06cc2 --- /dev/null +++ b/desktop/template/src/main.ts @@ -0,0 +1,42 @@ +import {createApp} from "vue"; +import App from "./app.vue"; +import {router} from "./router"; +import ElementPlus from "element-plus"; +import "element-plus/dist/index.css"; +import * as ElIcons from "@element-plus/icons-vue"; + +const app = createApp(App); + +app.use(ElementPlus, {zIndex: 90000}); + +for (const [key, component] of Object.entries(ElIcons)) { + app.component(key, component); +} + +app.use(router); + +app.directive("resize", { + mounted(el, binding) { + let _this: any = this; + function debounce(fn: any, delay = 16) { + let time: any = null; + return function () { + if (time) { + clearTimeout(time); + } + const context = _this; + const args = arguments + time = setTimeout(function () { + fn.apply(context, args); + }, delay); + } + } + el._resizer = new window.ResizeObserver(debounce(binding.value, Number(binding.arg) || 16)); + el._resizer.observe(el); + }, + unmounted(el) { + el._resizer.disconnect(); + } +}); + +app.mount("#app"); diff --git a/desktop/template/src/package/wailsjs/go/StartWindows/Api.d.ts b/desktop/template/src/package/wailsjs/go/StartWindows/Api.d.ts new file mode 100644 index 0000000..cd30476 --- /dev/null +++ b/desktop/template/src/package/wailsjs/go/StartWindows/Api.d.ts @@ -0,0 +1,6 @@ +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +export function GetPlatform():Promise; + +export function GetVersion():Promise>; diff --git a/desktop/template/src/package/wailsjs/go/StartWindows/Api.js b/desktop/template/src/package/wailsjs/go/StartWindows/Api.js new file mode 100644 index 0000000..bc6f138 --- /dev/null +++ b/desktop/template/src/package/wailsjs/go/StartWindows/Api.js @@ -0,0 +1,11 @@ +// @ts-check +// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL +// This file is automatically generated. DO NOT EDIT + +export function GetPlatform() { + return window['go']['StartWindows']['Api']['GetPlatform'](); +} + +export function GetVersion() { + return window['go']['StartWindows']['Api']['GetVersion'](); +} diff --git a/desktop/template/src/package/wailsjs/runtime/package.json b/desktop/template/src/package/wailsjs/runtime/package.json new file mode 100644 index 0000000..1e7c8a5 --- /dev/null +++ b/desktop/template/src/package/wailsjs/runtime/package.json @@ -0,0 +1,24 @@ +{ + "name": "@wailsapp/runtime", + "version": "2.0.0", + "description": "Wails Javascript runtime library", + "main": "runtime.js", + "types": "runtime.d.ts", + "scripts": { + }, + "repository": { + "type": "git", + "url": "git+https://github.com/wailsapp/wails.git" + }, + "keywords": [ + "Wails", + "Javascript", + "Go" + ], + "author": "Lea Anthony ", + "license": "MIT", + "bugs": { + "url": "https://github.com/wailsapp/wails/issues" + }, + "homepage": "https://github.com/wailsapp/wails#readme" +} diff --git a/desktop/template/src/package/wailsjs/runtime/runtime.d.ts b/desktop/template/src/package/wailsjs/runtime/runtime.d.ts new file mode 100644 index 0000000..a3723f9 --- /dev/null +++ b/desktop/template/src/package/wailsjs/runtime/runtime.d.ts @@ -0,0 +1,235 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +export interface Position { + x: number; + y: number; +} + +export interface Size { + w: number; + h: number; +} + +export interface Screen { + isCurrent: boolean; + isPrimary: boolean; + width : number + height : number +} + +// Environment information such as platform, buildtype, ... +export interface EnvironmentInfo { + buildType: string; + platform: string; + arch: string; +} + +// [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit) +// emits the given event. Optional data may be passed with the event. +// This will trigger any event listeners. +export function EventsEmit(eventName: string, ...data: any): void; + +// [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name. +export function EventsOn(eventName: string, callback: (...data: any) => void): () => void; + +// [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple) +// sets up a listener for the given event name, but will only trigger a given number times. +export function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void; + +// [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce) +// sets up a listener for the given event name, but will only trigger once. +export function EventsOnce(eventName: string, callback: (...data: any) => void): () => void; + +// [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff) +// unregisters the listener for the given event name. +export function EventsOff(eventName: string, ...additionalEventNames: string[]): void; + +// [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall) +// unregisters all listeners. +export function EventsOffAll(): void; + +// [LogPrint](https://wails.io/docs/reference/runtime/log#logprint) +// logs the given message as a raw message +export function LogPrint(message: string): void; + +// [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace) +// logs the given message at the `trace` log level. +export function LogTrace(message: string): void; + +// [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug) +// logs the given message at the `debug` log level. +export function LogDebug(message: string): void; + +// [LogError](https://wails.io/docs/reference/runtime/log#logerror) +// logs the given message at the `error` log level. +export function LogError(message: string): void; + +// [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal) +// logs the given message at the `fatal` log level. +// The application will quit after calling this method. +export function LogFatal(message: string): void; + +// [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo) +// logs the given message at the `info` log level. +export function LogInfo(message: string): void; + +// [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning) +// logs the given message at the `warning` log level. +export function LogWarning(message: string): void; + +// [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload) +// Forces a reload by the main application as well as connected browsers. +export function WindowReload(): void; + +// [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp) +// Reloads the application frontend. +export function WindowReloadApp(): void; + +// [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop) +// Sets the window AlwaysOnTop or not on top. +export function WindowSetAlwaysOnTop(b: boolean): void; + +// [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme) +// *Windows only* +// Sets window theme to system default (dark/light). +export function WindowSetSystemDefaultTheme(): void; + +// [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme) +// *Windows only* +// Sets window to light theme. +export function WindowSetLightTheme(): void; + +// [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme) +// *Windows only* +// Sets window to dark theme. +export function WindowSetDarkTheme(): void; + +// [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter) +// Centers the window on the monitor the window is currently on. +export function WindowCenter(): void; + +// [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle) +// Sets the text in the window title bar. +export function WindowSetTitle(title: string): void; + +// [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen) +// Makes the window full screen. +export function WindowFullscreen(): void; + +// [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen) +// Restores the previous window dimensions and position prior to full screen. +export function WindowUnfullscreen(): void; + +// [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen) +// Returns the state of the window, i.e. whether the window is in full screen mode or not. +export function WindowIsFullscreen(): Promise; + +// [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) +// Sets the width and height of the window. +export function WindowSetSize(width: number, height: number): Promise; + +// [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) +// Gets the width and height of the window. +export function WindowGetSize(): Promise; + +// [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize) +// Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions. +// Setting a size of 0,0 will disable this constraint. +export function WindowSetMaxSize(width: number, height: number): void; + +// [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize) +// Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions. +// Setting a size of 0,0 will disable this constraint. +export function WindowSetMinSize(width: number, height: number): void; + +// [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition) +// Sets the window position relative to the monitor the window is currently on. +export function WindowSetPosition(x: number, y: number): void; + +// [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition) +// Gets the window position relative to the monitor the window is currently on. +export function WindowGetPosition(): Promise; + +// [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide) +// Hides the window. +export function WindowHide(): void; + +// [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow) +// Shows the window, if it is currently hidden. +export function WindowShow(): void; + +// [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise) +// Maximises the window to fill the screen. +export function WindowMaximise(): void; + +// [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise) +// Toggles between Maximised and UnMaximised. +export function WindowToggleMaximise(): void; + +// [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise) +// Restores the window to the dimensions and position prior to maximising. +export function WindowUnmaximise(): void; + +// [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised) +// Returns the state of the window, i.e. whether the window is maximised or not. +export function WindowIsMaximised(): Promise; + +// [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise) +// Minimises the window. +export function WindowMinimise(): void; + +// [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise) +// Restores the window to the dimensions and position prior to minimising. +export function WindowUnminimise(): void; + +// [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised) +// Returns the state of the window, i.e. whether the window is minimised or not. +export function WindowIsMinimised(): Promise; + +// [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal) +// Returns the state of the window, i.e. whether the window is normal or not. +export function WindowIsNormal(): Promise; + +// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) +// Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. +export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; + +// [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall) +// Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system. +export function ScreenGetAll(): Promise; + +// [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) +// Opens the given URL in the system browser. +export function BrowserOpenURL(url: string): void; + +// [Environment](https://wails.io/docs/reference/runtime/intro#environment) +// Returns information about the environment +export function Environment(): Promise; + +// [Quit](https://wails.io/docs/reference/runtime/intro#quit) +// Quits the application. +export function Quit(): void; + +// [Hide](https://wails.io/docs/reference/runtime/intro#hide) +// Hides the application. +export function Hide(): void; + +// [Show](https://wails.io/docs/reference/runtime/intro#show) +// Shows the application. +export function Show(): void; + +// [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext) +// Returns the current text stored on clipboard +export function ClipboardGetText(): Promise; + +// [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext) +// Sets a text on the clipboard +export function ClipboardSetText(text: string): Promise; diff --git a/desktop/template/src/package/wailsjs/runtime/runtime.js b/desktop/template/src/package/wailsjs/runtime/runtime.js new file mode 100644 index 0000000..bd4f371 --- /dev/null +++ b/desktop/template/src/package/wailsjs/runtime/runtime.js @@ -0,0 +1,202 @@ +/* + _ __ _ __ +| | / /___ _(_) /____ +| | /| / / __ `/ / / ___/ +| |/ |/ / /_/ / / (__ ) +|__/|__/\__,_/_/_/____/ +The electron alternative for Go +(c) Lea Anthony 2019-present +*/ + +export function LogPrint(message) { + window.runtime.LogPrint(message); +} + +export function LogTrace(message) { + window.runtime.LogTrace(message); +} + +export function LogDebug(message) { + window.runtime.LogDebug(message); +} + +export function LogInfo(message) { + window.runtime.LogInfo(message); +} + +export function LogWarning(message) { + window.runtime.LogWarning(message); +} + +export function LogError(message) { + window.runtime.LogError(message); +} + +export function LogFatal(message) { + window.runtime.LogFatal(message); +} + +export function EventsOnMultiple(eventName, callback, maxCallbacks) { + return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks); +} + +export function EventsOn(eventName, callback) { + return EventsOnMultiple(eventName, callback, -1); +} + +export function EventsOff(eventName, ...additionalEventNames) { + return window.runtime.EventsOff(eventName, ...additionalEventNames); +} + +export function EventsOnce(eventName, callback) { + return EventsOnMultiple(eventName, callback, 1); +} + +export function EventsEmit(eventName) { + let args = [eventName].slice.call(arguments); + return window.runtime.EventsEmit.apply(null, args); +} + +export function WindowReload() { + window.runtime.WindowReload(); +} + +export function WindowReloadApp() { + window.runtime.WindowReloadApp(); +} + +export function WindowSetAlwaysOnTop(b) { + window.runtime.WindowSetAlwaysOnTop(b); +} + +export function WindowSetSystemDefaultTheme() { + window.runtime.WindowSetSystemDefaultTheme(); +} + +export function WindowSetLightTheme() { + window.runtime.WindowSetLightTheme(); +} + +export function WindowSetDarkTheme() { + window.runtime.WindowSetDarkTheme(); +} + +export function WindowCenter() { + window.runtime.WindowCenter(); +} + +export function WindowSetTitle(title) { + window.runtime.WindowSetTitle(title); +} + +export function WindowFullscreen() { + window.runtime.WindowFullscreen(); +} + +export function WindowUnfullscreen() { + window.runtime.WindowUnfullscreen(); +} + +export function WindowIsFullscreen() { + return window.runtime.WindowIsFullscreen(); +} + +export function WindowGetSize() { + return window.runtime.WindowGetSize(); +} + +export function WindowSetSize(width, height) { + window.runtime.WindowSetSize(width, height); +} + +export function WindowSetMaxSize(width, height) { + window.runtime.WindowSetMaxSize(width, height); +} + +export function WindowSetMinSize(width, height) { + window.runtime.WindowSetMinSize(width, height); +} + +export function WindowSetPosition(x, y) { + window.runtime.WindowSetPosition(x, y); +} + +export function WindowGetPosition() { + return window.runtime.WindowGetPosition(); +} + +export function WindowHide() { + window.runtime.WindowHide(); +} + +export function WindowShow() { + window.runtime.WindowShow(); +} + +export function WindowMaximise() { + window.runtime.WindowMaximise(); +} + +export function WindowToggleMaximise() { + window.runtime.WindowToggleMaximise(); +} + +export function WindowUnmaximise() { + window.runtime.WindowUnmaximise(); +} + +export function WindowIsMaximised() { + return window.runtime.WindowIsMaximised(); +} + +export function WindowMinimise() { + window.runtime.WindowMinimise(); +} + +export function WindowUnminimise() { + window.runtime.WindowUnminimise(); +} + +export function WindowSetBackgroundColour(R, G, B, A) { + window.runtime.WindowSetBackgroundColour(R, G, B, A); +} + +export function ScreenGetAll() { + return window.runtime.ScreenGetAll(); +} + +export function WindowIsMinimised() { + return window.runtime.WindowIsMinimised(); +} + +export function WindowIsNormal() { + return window.runtime.WindowIsNormal(); +} + +export function BrowserOpenURL(url) { + window.runtime.BrowserOpenURL(url); +} + +export function Environment() { + return window.runtime.Environment(); +} + +export function Quit() { + window.runtime.Quit(); +} + +export function Hide() { + window.runtime.Hide(); +} + +export function Show() { + window.runtime.Show(); +} + +export function ClipboardGetText() { + return window.runtime.ClipboardGetText(); +} + +export function ClipboardSetText(text) { + return window.runtime.ClipboardSetText(text); +} \ No newline at end of file diff --git a/desktop/template/src/router/index.ts b/desktop/template/src/router/index.ts new file mode 100644 index 0000000..f29cb8e --- /dev/null +++ b/desktop/template/src/router/index.ts @@ -0,0 +1,15 @@ +import { createRouter, createWebHashHistory } from "vue-router"; +import StartPage from "../windows/start.vue"; + +const routes = [ + { + path: "/", + name: "Start", + component: StartPage + }, +]; + +export const router = createRouter({ + history: createWebHashHistory(), + routes: routes +}) \ No newline at end of file diff --git a/desktop/template/src/vite-env.d.ts b/desktop/template/src/vite-env.d.ts new file mode 100644 index 0000000..8219b17 --- /dev/null +++ b/desktop/template/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// + +declare module "*.vue" { + import type {DefineComponent} from "vue"; + const component: DefineComponent<{}, {}, any>; + export default component; +} \ No newline at end of file diff --git a/desktop/template/src/windows/start.vue b/desktop/template/src/windows/start.vue new file mode 100644 index 0000000..3052189 --- /dev/null +++ b/desktop/template/src/windows/start.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/desktop/template/tsconfig.json b/desktop/template/tsconfig.json new file mode 100644 index 0000000..06dc2cc --- /dev/null +++ b/desktop/template/tsconfig.json @@ -0,0 +1,33 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "node", + "strict": true, + "jsx": "preserve", + "sourceMap": false, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": [ + "ESNext", + "DOM" + ], + "types": [ + "node" + ], + "skipLibCheck": true + }, + "include": [ + "src/**/*.ts", + "src/**/*.d.ts", + "src/**/*.tsx", + "src/**/*.vue" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file diff --git a/desktop/template/tsconfig.node.json b/desktop/template/tsconfig.node.json new file mode 100644 index 0000000..fe7a069 --- /dev/null +++ b/desktop/template/tsconfig.node.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "types": [ + "node" + ] + }, + "include": [ + "vite.config.ts" + ] +} \ No newline at end of file diff --git a/desktop/template/vite.config.ts b/desktop/template/vite.config.ts new file mode 100644 index 0000000..4f44920 --- /dev/null +++ b/desktop/template/vite.config.ts @@ -0,0 +1,17 @@ +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; + +export default defineConfig({ + server: { + port: 6173 + }, + plugins: [ + vue() + ], + build: { + sourcemap: false + }, + optimizeDeps: { + exclude: ["punycode"] + }, +}) \ No newline at end of file diff --git a/desktop/wails.json b/desktop/wails.json new file mode 100644 index 0000000..f71561d --- /dev/null +++ b/desktop/wails.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://wails.io/schemas/config.v2.json", + "name": "desktop", + "outputfilename": "desktop", + "build:dir": "release", + "wailsjsdir": "template/src/package", + "frontend:dir": "template", + "frontend:install": "yarn", + "frontend:build": "yarn build", + "frontend:dev:watcher": "yarn dev", + "frontend:dev:serverUrl": "auto", + "devServer": "localhost:10090", + "author": { + "name": "MakerYang", + "email": "admin@wileho.com" + }, + "info": { + "companyName": "MakerYang", + "productName": "Desktop", + "productVersion": "1.0.0", + "copyright": "Copyright © 2019-2022 MakerYang All Rights Reserved", + "comments": "MakerYang (https://www.makeryang.com)" + } +} \ No newline at end of file diff --git a/engine/assets/icon.svg b/engine/assets/icon.svg new file mode 100644 index 0000000..b370ceb --- /dev/null +++ b/engine/assets/icon.svg @@ -0,0 +1 @@ + diff --git a/engine/assets/icon.svg.import b/engine/assets/icon.svg.import new file mode 100644 index 0000000..cb8ca71 --- /dev/null +++ b/engine/assets/icon.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://uxjhy0m5hoin" +path="res://.godot/imported/icon.svg-56083ea2a1f1a4f1e49773bdc6d7826c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/icon.svg" +dest_files=["res://.godot/imported/icon.svg-56083ea2a1f1a4f1e49773bdc6d7826c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/engine/assets/launch/background.jpeg b/engine/assets/launch/background.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..a6ce98a93a6d67fc0b7aa7c2d41fc5e9abba5e88 GIT binary patch literal 220025 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∋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 O-sNB(Uh~Mm{`|l7?^J;R literal 0 HcmV?d00001 diff --git a/engine/assets/launch/background.jpeg.import b/engine/assets/launch/background.jpeg.import new file mode 100644 index 0000000..7815b06 --- /dev/null +++ b/engine/assets/launch/background.jpeg.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d05rp7emahb2e" +path="res://.godot/imported/background.jpeg-5639b05a789575f90a2f9972dfc49a59.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/launch/background.jpeg" +dest_files=["res://.godot/imported/background.jpeg-5639b05a789575f90a2f9972dfc49a59.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/engine/project.godot b/engine/project.godot new file mode 100644 index 0000000..430e241 --- /dev/null +++ b/engine/project.godot @@ -0,0 +1,40 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Mir of Godot" +config/version="1.0.0" +run/main_scene="res://scenes/launch/launch.tscn" +config/features=PackedStringArray("4.2", "Mobile") +boot_splash/bg_color=Color(0, 0, 0, 1) +config/icon="res://assets/icon.svg" + +[autoload] + +Global="*res://scripts/framework/global.gd" +Server="*res://scripts/framework/server/server.gd" +Client="*res://scripts/framework/client/client.gd" +Request="*res://scripts/framework/utils/request.gd" + +[display] + +window/size/viewport_width=1280 +window/size/viewport_height=720 +window/stretch/scale_mode="integer" + +[filesystem] + +import/blender/enabled=false + +[rendering] + +renderer/rendering_method="mobile" +environment/defaults/default_clear_color=Color(0, 0, 0, 1) diff --git a/engine/scenes/launch/launch.tscn b/engine/scenes/launch/launch.tscn new file mode 100644 index 0000000..aa06470 --- /dev/null +++ b/engine/scenes/launch/launch.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=2 format=3 uid="uid://i6g3y6btijjm"] + +[ext_resource type="Texture2D" uid="uid://d05rp7emahb2e" path="res://assets/launch/background.jpeg" id="1_5xji2"] + +[node name="Launch" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Background" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("1_5xji2") +expand_mode = 2 +stretch_mode = 6 diff --git a/engine/scripts/framework/client/client.gd b/engine/scripts/framework/client/client.gd new file mode 100644 index 0000000..749bf96 --- /dev/null +++ b/engine/scripts/framework/client/client.gd @@ -0,0 +1,28 @@ +#***************************************************************************** +# @file client.gd +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +extends Node + +# 初始化自定义数据 +var client_peer:ENetMultiplayerPeer + +# 初始化数据结构 +var data = { + "client_id": 0 +} + +# 创建客户端并返回客户端状态 +func create_client() -> int: + client_peer = ENetMultiplayerPeer.new() + var error = client_peer.create_client(Global.get_server_address(), Global.get_server_port()) + if error == OK: + multiplayer.multiplayer_peer = client_peer + # 更新客户端ID + update_client_id(multiplayer.get_unique_id()) + return error + +# 更新客户端ID +func update_client_id(client_id: int) -> void: + data["client_id"] = client_id diff --git a/engine/scripts/framework/global.gd b/engine/scripts/framework/global.gd new file mode 100644 index 0000000..876f510 --- /dev/null +++ b/engine/scripts/framework/global.gd @@ -0,0 +1,53 @@ +#***************************************************************************** +# @file global.gd +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +extends Node + +# 初始化数据结构 +var data = { + "varsion": "1.0.0", + "mode": "", + "server": { + "port": 7020, + "address": "game.makeryang.com" + }, + "account": { + "token": "" + } +} + +func _ready() -> void: + # 服务器模式检测 + if OS.has_feature("dedicated_server"): + print("[服务器模式]") + data["mode"] = "server" + var error = Server.create_server() + if error != OK: + printerr("[服务器创建失败]") + else: + print("[客户端模式]") + data["mode"] = "client" + var error = Client.create_client() + if error != OK: + printerr("[服务器连接失败]") + +# 是否为服务器模式 +func is_server() -> bool: + var server = false + if data["mode"] == "server": + server = true + return server + +# 获取服务器端口 +func get_server_port() -> int: + return data["server"]["port"] + +# 获取服务器端口 +func get_server_address() -> String: + return data["server"]["address"] + +# 获取用户Token +func get_account_token() -> String: + return data["account"]["token"] diff --git a/engine/scripts/framework/server/server.gd b/engine/scripts/framework/server/server.gd new file mode 100644 index 0000000..1669438 --- /dev/null +++ b/engine/scripts/framework/server/server.gd @@ -0,0 +1,29 @@ +#***************************************************************************** +# @file server.gd +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +extends Node + +# 初始化自定义数据 +var server_peer:ENetMultiplayerPeer + +# 创建服务器并返回服务器状态 +func create_server() -> int: + print("[创建服务器...]") + server_peer = ENetMultiplayerPeer.new() + var error = server_peer.create_server(Global.get_server_port()) + if error == OK: + multiplayer.multiplayer_peer = server_peer + multiplayer.peer_connected.connect(_on_peer_connected) + multiplayer.peer_disconnected.connect(_on_peer_disconnected) + print("[服务器创建成功]") + return error + +# 客户端连接服务器时回调函数 +func _on_peer_connected(id: int) -> void: + print("[新的客户端连接 " + str(id) + "]") + +# 客户端断开服务器时回调函数 +func _on_peer_disconnected(id: int) -> void: + print("[客户端连接断开 " + str(id) + "]") diff --git a/engine/scripts/framework/utils/request.gd b/engine/scripts/framework/utils/request.gd new file mode 100644 index 0000000..521d137 --- /dev/null +++ b/engine/scripts/framework/utils/request.gd @@ -0,0 +1,30 @@ +#***************************************************************************** +# @file request.gd +# @author MakerYang(https://www.makeryang.com) +# @statement 免费课程配套开源项目,任何形式收费均为盗版 +#***************************************************************************** +extends Node + +# 初始化自定义数据 +var http_request:HTTPRequest = HTTPRequest.new() +var http_callback = null + +# 初始化数据结构 +var data = { + "headers": [ + "Content-Type: application/json", + "Account-Token: ", + ] +} + +# 请求服务器接口 +func on_server(path: String, method: int, parameter, callback) -> void: + if !http_request.is_inside_tree(): + add_child(http_request) + var parameter_json = JSON.stringify(parameter) + data["headers"][1] = "Account-Token: " + Global.get_account_token() + if http_callback and http_request.is_connected("request_completed", http_callback): + http_request.request_completed.disconnect(http_callback) + http_request.request_completed.connect(callback) + http_callback = callback + http_request.request("https://" + Global.get_server_address() + path, data["headers"], method, parameter_json) diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..4117403 --- /dev/null +++ b/readme.md @@ -0,0 +1,49 @@ +# 🛠️ Engine2D + +⚡ 基于Godot的2D游戏开发框架 ⚡ + +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) + + +### 🔦 源码下载 + +> 随着框架不断的迭代,仓库的历史提交数据逐渐庞大,你可以使用下面的命令来加速源码的下载。 + +```shell +git clone --depth=1 git@github.com:makeryangcom/Engine2D.git +``` + +### 🛸 技术栈 + +> 构建一个完整的游戏需要多种技术栈的整合,本框架涉及的技术栈如下: + +| Software | Version | Describe | +| - | - | - | +| Godot | 4.2.1+ | 游戏引擎 | +| Golang | 1.19.4+ | 后端服务 | +| NodeJS | 18.13.0+ | 桌面管理工具 | + +### ✨ 目录结构 + +> 框架包含游戏引擎、后端服务、桌面管理工具等核心模块,详见下面的目录结构说明: + +```html +/Engine2D/ +├─engine +├─server +├─desktop +``` + +### 🚀 配套课程 + +> 框架配套的相关的课程可以在`https://www.makeryang.com`获取。 + +### 💡 关于作者 + +🔗 Wechat: `makeryang8080` + +🔗 WebSite: `https://www.makeryang.com` + +🔗 Bilibili: `https://space.bilibili.com/596334734` + +🔗 DouYin&Tiktok: `MakerYang` \ No newline at end of file diff --git a/server/framework/config/config.go b/server/framework/config/config.go new file mode 100644 index 0000000..e309f3e --- /dev/null +++ b/server/framework/config/config.go @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file config.go + * @author MakerYang + ****************************************************************************** + */ + +package Config + +import "time" + +var Get = &config{} + +type config struct { + Service service `json:"service"` + Database database `json:"database"` + Hash hash `json:"hash"` +} + +type service struct { + Mode string `json:"mode"` + HttpPort int `json:"http_port"` + ReadTimeout time.Duration `json:"read_timeout"` + WriteTimeout time.Duration `json:"write_timeout"` +} + +type database struct { + Type string `json:"type"` + User string `json:"user"` + Password string `json:"password"` + Host string `json:"host"` + Name string `json:"name"` +} + +type hash struct { + Salt string `json:"salt"` +} + +func Init() { + Get.Service.Mode = "debug" + Get.Service.HttpPort = 7000 + Get.Service.ReadTimeout = 60 * time.Second + Get.Service.WriteTimeout = 60 * time.Second + + Get.Database.Name = "database" + Get.Database.Type = "mysql" + Get.Database.Host = "localhost" + Get.Database.User = "root" + Get.Database.Password = "88888888" + + Get.Hash.Salt = "game_$@#godot_@$salt_$@$service%#^#%@%#" +} diff --git a/server/framework/controller/controller.go b/server/framework/controller/controller.go new file mode 100644 index 0000000..760da98 --- /dev/null +++ b/server/framework/controller/controller.go @@ -0,0 +1,61 @@ +/** + ****************************************************************************** + * @file controller.go + * @author MakerYang + ****************************************************************************** + */ + +package Controller + +import ( + "Game/framework/config" + "Game/framework/controller/ping" + "context" + "fmt" + "github.com/gin-gonic/gin" + "github.com/gookit/color" + "log" + "net/http" + "os" + "os/signal" + "time" +) + +func router() *gin.Engine { + router := gin.New() + + gin.SetMode(Config.Get.Service.Mode) + + router.GET("/ping", PingController.Ping) + + return router +} + +func Init() { + routers := router() + + var HttpServer = &http.Server{ + Addr: fmt.Sprintf(":%d", Config.Get.Service.HttpPort), + Handler: routers, + ReadTimeout: Config.Get.Service.ReadTimeout, + WriteTimeout: Config.Get.Service.WriteTimeout, + MaxHeaderBytes: 1 << 20, + } + + go func() { + if err := HttpServer.ListenAndServe(); err != nil { + } + }() + + log.Println("[game]", color.Green.Text("server...")) + + quit := make(chan os.Signal) + signal.Notify(quit, os.Interrupt) + <-quit + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + if err := HttpServer.Shutdown(ctx); err != nil { + } +} diff --git a/server/framework/controller/ping/ping.go b/server/framework/controller/ping/ping.go new file mode 100644 index 0000000..f4bd3a5 --- /dev/null +++ b/server/framework/controller/ping/ping.go @@ -0,0 +1,18 @@ +/** + ****************************************************************************** + * @file ping.go + * @author MakerYang + ****************************************************************************** + */ + +package PingController + +import ( + "Game/framework/utils" + "github.com/gin-gonic/gin" +) + +func Ping(c *gin.Context) { + Utils.Success(c, Utils.EmptyData{}) + return +} diff --git a/server/framework/database/database.go b/server/framework/database/database.go new file mode 100644 index 0000000..42a9e31 --- /dev/null +++ b/server/framework/database/database.go @@ -0,0 +1,74 @@ +/** + ****************************************************************************** + * @file database.go + * @author MakerYang + ****************************************************************************** + */ + +package Database + +import ( + "Game/framework/config" + "fmt" + "github.com/gookit/color" + "github.com/jinzhu/gorm" + _ "github.com/jinzhu/gorm/dialects/mysql" + "log" + "time" +) + +var Get *gorm.DB + +type DefaultField struct { + CreateAt int `gorm:"Column:create_at" json:"create_at"` + UpdateAt int `gorm:"Column:update_at" json:"update_at"` + DeleteAt int `gorm:"Column:delete_at" json:"delete_at"` +} + +func Init() { + + var err error + + Get, err = gorm.Open(Config.Get.Database.Type, fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", Config.Get.Database.User, Config.Get.Database.Password, Config.Get.Database.Host, Config.Get.Database.Name)) + if err != nil { + log.Println("[database]", color.Red.Text(err.Error())) + } + + if Config.Get.Service.Mode == "release" { + Get.LogMode(false) + } else { + Get.LogMode(true) + } + + gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string { + return defaultTableName + } + + Get.SingularTable(true) + + Get.Callback().Create().Replace("gorm:update_time_stamp", func(scope *gorm.Scope) { + if !scope.HasError() { + nowTime := time.Now().Unix() + if createTimeField, ok := scope.FieldByName("CreateAt"); ok { + if createTimeField.IsBlank { + err := createTimeField.Set(nowTime) + if err != nil { + } + } + } + + if modifyTimeField, ok := scope.FieldByName("UpdateAt"); ok { + if modifyTimeField.IsBlank { + err := modifyTimeField.Set(nowTime) + if err != nil { + } + } + } + } + }) + + Get.DB().SetMaxIdleConns(1000) + Get.DB().SetMaxOpenConns(10000) + + Get.DB().SetConnMaxLifetime(time.Second * 45) +} diff --git a/server/framework/database/interface.go b/server/framework/database/interface.go new file mode 100644 index 0000000..d9fbdd4 --- /dev/null +++ b/server/framework/database/interface.go @@ -0,0 +1,65 @@ +/** + ****************************************************************************** + * @file interface.go + * @author MakerYang + ****************************************************************************** + */ + +package Database + +import ( + "github.com/jinzhu/gorm" + "time" +) + +type Base struct { + TableName string +} + +func New(table string) *Base { + return &Base{ + TableName: table, + } +} + +func (base *Base) CreateData(data interface{}) error { + err := Get.Table(base.TableName).Create(data).Error + return err +} + +func (base *Base) UpdateData(query interface{}, data map[string]interface{}) error { + data["update_at"] = time.Now().Unix() + err := Get.Table(base.TableName).Where(query).Updates(data).Error + return err +} + +func (base *Base) ExprData(query interface{}, field string, operation string, data int) error { + err := Get.Table(base.TableName).Where(query).Update(field, gorm.Expr(field+" "+operation+" ?", data)).Error + return err +} + +func (base *Base) GetData(dataStruct interface{}, query interface{}, order string) error { + err := Get.Table(base.TableName).Where(query).Order(order).First(dataStruct).Error + return err +} + +func (base *Base) ListData(dataStruct interface{}, query interface{}, order string, limit int) error { + err := Get.Table(base.TableName).Where(query).Order(order).Limit(limit).Find(dataStruct).Error + return err +} + +func (base *Base) PageData(dataStruct interface{}, query interface{}, order string, limit int, page int) error { + err := Get.Table(base.TableName).Where(query).Order(order).Limit(limit).Offset(page * limit).Find(dataStruct).Error + return err +} + +func (base *Base) CountData(query interface{}) (int, error) { + count := 0 + err := Get.Table(base.TableName).Where(query).Count(&count).Error + return count, err +} + +func (base *Base) DeleteData(dataStruct interface{}, query interface{}) error { + err := Get.Table(base.TableName).Where(query).Delete(dataStruct).Error + return err +} diff --git a/server/framework/framework.go b/server/framework/framework.go new file mode 100644 index 0000000..ccf1e7d --- /dev/null +++ b/server/framework/framework.go @@ -0,0 +1,23 @@ +/** + ****************************************************************************** + * @file framework.go + * @author MakerYang + ****************************************************************************** + */ + +package Framework + +import ( + "Game/framework/config" + "Game/framework/controller" + "Game/framework/database" +) + +func Init() { + // 初始化配置 + Config.Init() + // 初始化数据库 + Database.Init() + // 初始化控制器 + Controller.Init() +} diff --git a/server/framework/utils/empty_data.go b/server/framework/utils/empty_data.go new file mode 100644 index 0000000..dd7202f --- /dev/null +++ b/server/framework/utils/empty_data.go @@ -0,0 +1,3 @@ +package Utils + +type EmptyData struct{} diff --git a/server/framework/utils/hashids.go b/server/framework/utils/hashids.go new file mode 100644 index 0000000..20e6836 --- /dev/null +++ b/server/framework/utils/hashids.go @@ -0,0 +1,27 @@ +package Utils + +import ( + "Game/framework/config" + "github.com/speps/go-hashids" +) + +func EncodeId(len int, id ...int) string { + hd := hashids.NewData() + hd.Salt = Config.Get.Hash.Salt + hd.MinLength = len + h := hashids.NewWithData(hd) + e, _ := h.Encode(id) + return e +} + +func DecodeId(len int, encodedId string) ([]int, error) { + hd := hashids.NewData() + hd.Salt = Config.Get.Hash.Salt + hd.MinLength = len + h := hashids.NewWithData(hd) + d, err := h.DecodeWithError(encodedId) + if err != nil { + return nil, err + } + return d, nil +} diff --git a/server/framework/utils/header.go b/server/framework/utils/header.go new file mode 100644 index 0000000..e5d717a --- /dev/null +++ b/server/framework/utils/header.go @@ -0,0 +1,49 @@ +package Utils + +import "strings" + +func CheckUserAgent(userAgent string) bool { + Status := false + + if strings.Contains(userAgent, "GodotEngine") { + Status = true + } + + return Status +} + +func CheckGame(token string) (int, int, bool) { + Status := false + GameId := 0 + GameAccountId := 0 + + if token != "" { + tokenMap, _ := DecodeId(128, token) + if len(tokenMap) == 2 { + GameId = tokenMap[0] + GameAccountId = tokenMap[1] + Status = true + } + } + + if GameId == 0 || GameAccountId == 0 { + Status = false + } + + return GameId, GameAccountId, Status +} + +func CheckUser(token string) (int, bool) { + Status := false + Uid := 0 + + if token != "" { + tokenMap, _ := DecodeId(32, token) + if len(tokenMap) == 3 { + Uid = tokenMap[0] + Status = true + } + } + + return Uid, Status +} diff --git a/server/framework/utils/mailbox.go b/server/framework/utils/mailbox.go new file mode 100644 index 0000000..e09b023 --- /dev/null +++ b/server/framework/utils/mailbox.go @@ -0,0 +1,17 @@ +package Utils + +import "gopkg.in/gomail.v2" + +func SendMail(to string, subject string, content string) bool { + status := true + mail := gomail.NewMessage() + mail.SetHeader("From", mail.FormatAddress("open@wileho.com", "GEEKROS")) + mail.SetHeader("To", to) + mail.SetHeader("Subject", subject) + mail.SetBody("text/html", content) + send := gomail.NewDialer("smtp.qq.com", 587, "open@wileho.com", "") + if err := send.DialAndSend(mail); err != nil { + status = false + } + return status +} diff --git a/server/framework/utils/markdown.go b/server/framework/utils/markdown.go new file mode 100644 index 0000000..180a818 --- /dev/null +++ b/server/framework/utils/markdown.go @@ -0,0 +1,27 @@ +package Utils + +import ( + "regexp" + "strings" +) + +func FilterMarkdown(input string) string { + quoteBlockRegex := regexp.MustCompile(`^\s*>[ \t]*(.*)$`) + lines := strings.Split(input, "\n") + var quoteLines []string + for _, line := range lines { + if quoteBlockRegex.MatchString(line) { + match := quoteBlockRegex.FindStringSubmatch(line) + quoteLines = append(quoteLines, match[1]) + } + } + return strings.Join(quoteLines, "") +} + +func FilterSummary(input string, maxLength int) string { + text := strings.TrimSpace(input) + if len(text) <= maxLength { + return text + } + return text[:maxLength] +} diff --git a/server/framework/utils/md5.go b/server/framework/utils/md5.go new file mode 100644 index 0000000..d412532 --- /dev/null +++ b/server/framework/utils/md5.go @@ -0,0 +1,22 @@ +/** + ****************************************************************************** + * @file md5.go + * @author MakerYang + ****************************************************************************** + */ + +package Utils + +import ( + "crypto/md5" + "encoding/hex" +) + +func MD5Hash(text string) string { + hash := md5.Sum([]byte(text)) + return hex.EncodeToString(hash[:]) +} + +func VerifyPassword(storedPassword, inputPassword string) bool { + return MD5Hash(inputPassword) == storedPassword +} diff --git a/server/framework/utils/order.go b/server/framework/utils/order.go new file mode 100644 index 0000000..e57f3e2 --- /dev/null +++ b/server/framework/utils/order.go @@ -0,0 +1,18 @@ +package Utils + +import ( + "math/rand" + "time" +) + +func CreateOrderNum() string { + str := "0123456789" + bytes := []byte(str) + result := make([]byte, 0) + r := rand.New(rand.NewSource(time.Now().UnixNano())) + for i := 0; i < 8; i++ { + result = append(result, bytes[r.Intn(len(bytes))]) + } + order := time.Now().Format("20060102150405") + string(result) + return order +} diff --git a/server/framework/utils/phone.go b/server/framework/utils/phone.go new file mode 100644 index 0000000..2af2465 --- /dev/null +++ b/server/framework/utils/phone.go @@ -0,0 +1,69 @@ +package Utils + +import ( + "bytes" + "encoding/json" + "io/ioutil" + "log" + "net/http" + "regexp" +) + +func MobileFormat(str string) string { + re, _ := regexp.Compile("(\\d{3})(\\d{6})(\\d{2})") + return re.ReplaceAllString(str, "$1******$3") +} + +func SendMessage(form string, phone string, info string) bool { + status := true + if form == "" || phone == "" || info == "" { + status = false + return status + } + desc := "" + if form == "express" { + desc = "【GEEKROS】Hi," + info + " ,你在GEEKROS的订单已经发货,请留意快递信息,及时查收。" + } + if form == "account" { + desc = "【GEEKROS】你的验证码为:" + info + " ,有效期10分钟,工作人员绝不会索取此验证码,切勿告知他人。" + } + + apiUrl := "https://smssh1.253.com/msg/v1/send/json" + params := make(map[string]interface{}) + params["account"] = "" + params["password"] = "" + params["phone"] = phone + params["msg"] = desc + params["report"] = "false" + + bytesData, err := json.Marshal(params) + if err != nil { + status = false + return status + } + + reader := bytes.NewReader(bytesData) + request, err := http.NewRequest("POST", apiUrl, reader) + if err != nil { + status = false + return status + } + + request.Header.Set("Content-Type", "application/json;charset=UTF-8") + client := http.Client{} + resp, err := client.Do(request) + if err != nil { + status = false + return status + } + + respBytes, err := ioutil.ReadAll(resp.Body) + if err != nil { + status = false + return status + } + + log.Println("[PhoneMessage]", string(respBytes)) + + return true +} diff --git a/server/framework/utils/price.go b/server/framework/utils/price.go new file mode 100644 index 0000000..a532498 --- /dev/null +++ b/server/framework/utils/price.go @@ -0,0 +1,7 @@ +package Utils + +import "fmt" + +func PriceConvert(num int) string { + return fmt.Sprintf("%.2f", float64(num)/100) +} diff --git a/server/framework/utils/rand.go b/server/framework/utils/rand.go new file mode 100644 index 0000000..7e7e48c --- /dev/null +++ b/server/framework/utils/rand.go @@ -0,0 +1,20 @@ +package Utils + +import ( + "fmt" + "math/rand" + "time" +) + +func RandInt(min, max int) int { + if min >= max || min == 0 || max == 0 { + return max + } + return rand.Intn(max-min) + min +} + +func RandCode() string { + randNumber := rand.New(rand.NewSource(time.Now().UnixNano())) + code := fmt.Sprintf("%06v", randNumber.Int31n(1000000)) + return code +} diff --git a/server/framework/utils/return.go b/server/framework/utils/return.go new file mode 100644 index 0000000..bf303f8 --- /dev/null +++ b/server/framework/utils/return.go @@ -0,0 +1,105 @@ +package Utils + +import ( + "encoding/json" + "github.com/gin-gonic/gin" + "log" + "net/http" + "os" + "strconv" + "time" +) + +type logData struct { + Timestamp int64 `json:"timestamp"` + TimestampFormat string `json:"timestamp_format"` + ClientMethod string `json:"client_method"` + ClientIp string `json:"client_ip"` + ClientParameter string `json:"client_parameter"` + ServerParameter string `json:"server_parameter"` + ServerUrl string `json:"server_url"` + ServerName string `json:"server_name"` + ServerYear string `json:"server_year"` + ServerMonth string `json:"server_month"` + ServerDay string `json:"server_day"` + ServerTime string `json:"server_time"` + TimeLength string `json:"time_length"` +} + +func recordLog(c *gin.Context, serverParameter string) { + data := &logData{} + data.Timestamp = time.Now().Unix() + data.TimestampFormat = time.Now().Format("2006-01-02 15:04:05") + data.ClientMethod = c.Request.Method + data.ClientIp = c.ClientIP() + if data.ClientMethod == "GET" { + data.ClientParameter = c.Request.RequestURI + } + if data.ClientMethod == "POST" { + clientParam, err := json.Marshal(c.Request.PostForm) + if err != nil { + data.ClientParameter = "" + } + if err == nil { + data.ClientParameter = string(clientParam) + } + } + scheme := "http://" + if c.Request.TLS != nil { + scheme = "https://" + } + serverUrl := scheme + c.Request.Host + c.Request.URL.Path + serverName, _ := os.Hostname() + data.ServerUrl = serverUrl + data.ServerName = serverName + data.ClientParameter = c.GetString("client_parameter") + data.ServerParameter = serverParameter + data.ServerYear = time.Now().Format("2006") + data.ServerMonth = time.Now().Format("01") + data.ServerDay = time.Now().Format("02") + data.ServerTime = time.Now().Format("15:04:05") + data.TimeLength = strconv.FormatFloat(float64(time.Now().UnixNano())/1000000-c.GetFloat64("start_time"), 'f', 2, 64) + dataString, _ := json.Marshal(data) + + log.Println("[Log]", string(dataString)) +} + +func Success(c *gin.Context, data interface{}) { + c.JSON(http.StatusOK, gin.H{ + "code": 0, + "msg": "success", + "data": data, + }) + logJson, _ := json.Marshal(gin.H{"code": 0, "msg": "success", "data": data}) + recordLog(c, string(logJson)) +} + +func Error(c *gin.Context, data interface{}) { + c.JSON(http.StatusOK, gin.H{ + "code": 10000, + "msg": "error", + "data": data, + }) + logJson, _ := json.Marshal(gin.H{"code": 10000, "msg": "error", "data": data}) + recordLog(c, string(logJson)) +} + +func Warning(c *gin.Context, code int, msg string, data interface{}) { + c.JSON(http.StatusOK, gin.H{ + "code": code, + "msg": msg, + "data": data, + }) + logJson, _ := json.Marshal(gin.H{"code": code, "msg": msg, "data": data}) + recordLog(c, string(logJson)) +} + +func AuthError(c *gin.Context, code int, msg string, data interface{}) { + c.JSON(http.StatusUnauthorized, gin.H{ + "code": code, + "msg": msg, + "data": data, + }) + logJson, _ := json.Marshal(gin.H{"code": code, "msg": msg, "data": data}) + recordLog(c, string(logJson)) +} diff --git a/server/framework/utils/time.go b/server/framework/utils/time.go new file mode 100644 index 0000000..c0a83b1 --- /dev/null +++ b/server/framework/utils/time.go @@ -0,0 +1,33 @@ +package Utils + +import ( + "strconv" + "time" +) + +func TimeFormat(unix int) (string, string) { + timeInt := time.Unix(int64(unix), 0) + return timeInt.Format("2006年01月02日"), timeInt.Format("2006-01-02 15:04:05") +} + +func DateFormat(times int) string { + createTime := time.Unix(int64(times), 0) + now := time.Now().Unix() + + difTime := now - int64(times) + + str := "" + if difTime < 60 { + str = "刚刚" + } else if difTime < 3600 { + M := difTime / 60 + str = strconv.Itoa(int(M)) + "分钟前" + } else if difTime < 3600*24 { + H := difTime / 3600 + str = strconv.Itoa(int(H)) + "小时前" + } else { + str = createTime.Format("2006-01-02 15:04:05") + } + + return str +} diff --git a/server/go.mod b/server/go.mod new file mode 100644 index 0000000..b42187d --- /dev/null +++ b/server/go.mod @@ -0,0 +1,42 @@ +module Game + +go 1.19 + +require ( + github.com/gin-gonic/gin v1.9.1 + github.com/gookit/color v1.5.4 + github.com/jinzhu/gorm v1.9.16 + github.com/speps/go-hashids v1.0.0 + gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df +) + +require ( + github.com/bytedance/sonic v1.9.1 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect + github.com/gin-contrib/sse v0.1.0 // indirect + github.com/go-playground/locales v0.14.1 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect + github.com/go-playground/validator/v10 v10.14.0 // indirect + github.com/go-sql-driver/mysql v1.5.0 // indirect + github.com/goccy/go-json v0.10.2 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/leodido/go-urn v1.2.4 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect + github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect + golang.org/x/arch v0.3.0 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/net v0.10.0 // indirect + golang.org/x/sys v0.10.0 // indirect + golang.org/x/text v0.9.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/server/go.sum b/server/go.sum new file mode 100644 index 0000000..6b45182 --- /dev/null +++ b/server/go.sum @@ -0,0 +1,126 @@ +github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= +github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM= +github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= +github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= +github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= +github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= +github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= +github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= +github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= +github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= +github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= +github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= +github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= +github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= +github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o= +github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs= +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.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M= +github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= +github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= +github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= +github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4= +github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +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.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA= +github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= +github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/speps/go-hashids v1.0.0 h1:jdFC07PrExRM4Og5Ev4411Tox75aFpkC77NlmutadNI= +github.com/speps/go-hashids v1.0.0/go.mod h1:P7hqPzMdnZOfyIk+xrlG1QaSMw+gCBdHKsBDnhpaZvc= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= +golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= +gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE= +gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/server/main.go b/server/main.go new file mode 100644 index 0000000..6df4715 --- /dev/null +++ b/server/main.go @@ -0,0 +1,15 @@ +/** + ****************************************************************************** + * @file main.go + * @author MakerYang + ****************************************************************************** + */ + +package main + +import "Game/framework" + +func main() { + // 初始化核心框架 + Framework.Init() +} diff --git a/tools/centos/data/wwwroot/default/index.html b/tools/centos/data/wwwroot/default/index.html new file mode 100644 index 0000000..e69de29 diff --git a/tools/centos/etc/nginx/conf.d/game.makeryang.com.conf b/tools/centos/etc/nginx/conf.d/game.makeryang.com.conf new file mode 100644 index 0000000..4dd2268 --- /dev/null +++ b/tools/centos/etc/nginx/conf.d/game.makeryang.com.conf @@ -0,0 +1,41 @@ +server { + listen 80; + listen [::]:80; + listen 443 ssl http2; + listen [::]:443 ssl http2; + ssl_certificate /etc/nginx/ssl/game.makeryang.com.pem; + ssl_certificate_key /etc/nginx/ssl/game.makeryang.com.key; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; + ssl_ciphers TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; + ssl_prefer_server_ciphers on; + ssl_session_timeout 10m; + ssl_session_cache builtin:1000 shared:SSL:10m; + ssl_buffer_size 1400; + add_header Strict-Transport-Security max-age=15768000; + ssl_stapling on; + ssl_stapling_verify on; + server_name game.makeryang.com; + access_log off; + if ($ssl_protocol = "") { return 301 https://$host$request_uri; } + location / { + client_max_body_size 100m; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://localhost:7000/; + proxy_ignore_client_abort on; + proxy_set_header Cookie $http_cookie; + proxy_set_header Host $host; + } + location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ { + expires 60s; + access_log off; + } + location ~ .*\.(js|css)?$ { + expires 60s; + access_log off; + } + location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) { + deny all; + } +} \ No newline at end of file diff --git a/tools/centos/etc/nginx/nginx.conf b/tools/centos/etc/nginx/nginx.conf new file mode 100644 index 0000000..028fa92 --- /dev/null +++ b/tools/centos/etc/nginx/nginx.conf @@ -0,0 +1,30 @@ +user nginx; +worker_processes auto; +error_log /var/log/nginx/error.log; +pid /run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_min_length 1000; + gzip_comp_level 6; + gzip_types text/plain application/xml application/json application/javascript text/css; + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + access_log /var/log/nginx/access.log main; + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 4096; + include /etc/nginx/mime.types; + default_type application/octet-stream; + include /etc/nginx/conf.d/*.conf; +} + diff --git a/tools/centos/etc/nginx/ssl/game.makeryang.com.key b/tools/centos/etc/nginx/ssl/game.makeryang.com.key new file mode 100644 index 0000000..8b0a44d --- /dev/null +++ b/tools/centos/etc/nginx/ssl/game.makeryang.com.key @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAjNDUW/WYlpctqVq0+kRwknV+pZsWWN95sqErhls7047CnWoA +V/RxUUj8aIOCVgBX91wDXPSRVuPqmu6Eqc/E+5KIvLCZxg6hoj0aTV+Od1+7Ane2 +PgFAUNNTTeNYpDUAIsvejQTBSxhpWYvx+MKXgGL4C9ysLRBYfZOFy9jGwsd5kxM0 +tqZY1jByyX7p/HAEJVCZe8jdfOZssZjoj+NPXRIivsU+vO3Lv0Pr7yY2vsRi3Aa+ +RUCL45t8nbRf9RRA1EkHxnmnuG6QWng/Td5xUbEEkrdreizqH6f08aNJAmyeH9kE +F61MU7nxfpAG5Pu2Bcj7jZo0eXLz+oDjIKlnkwIDAQABAoIBAAcogHsSP4j8M2aG +BWgpfX18eo0plpe6+IFDnyZL0f09pxgAcPcHppEGwEoB0WjUyKP66fLaPd8oY98v +W9AUD0PonYnWAmMmkEHikEk5n9DirWuBMWLyhlX1gCkX8wQZ66FZMr2BbeAG5CgY +rJrELZZpsYlM1PXPfGgZzTXhFa2GChCeLKla0Z9eQmn5J/eGfaolbrjFeSDAlWOA +IZHO7cm3vSvNWfsfkKmO/s8dzwlVC86rw0Wpx5crLGVsFXTFlOYTVLIOciXeN2vc +gfvYD9E/S+HEYAiYtT+J82QVbkxzvdJ8tzqCmD4gUjl4ORRdxNsHZX23mxAcJ0gi +zXfWsFUCgYEAw7oO0M3TYZpVB5HmU4nWrPXy4HS9L4N2HJMjxX4ihfG53t1cHi2T +oTuOHtL4H/FZHnhBt2++2W142AeHFvSDsbeCLACZe7zxfVJyWid1EWBUtJEtLJ7n +rJbuyvR5OsC9TSgijotafet9J+IJGMlv2Z5rJdULJe4k6256bJNbk1cCgYEAuC3o +0iMv8lcHqIT4h6Q+CZBVZUD4PwkFfcuU5+fMHRbaylAZpolRCc8A4uLilG2+egJK +Mt7M8dJnEONxffUmlJg0zIdG2xTvDC+3rnz4jtTOEUw/1tB0oCRj84sk4LyNcjkG +ls2w/tbY08VLwf5H9CnflNt551aJNdLAh1TGRCUCgYEAriJjugvVK7oGOnTo6Zvx +vfIXwvC5vIMGW0fhhHzDNE4qowhoQ4UjGkiFGhFypeCw/DXbqdsmfgUyhWi1HIww +erWcf4+M/hTM+UWX7XO7aNk+o2OiQFekIN4r16+IB+igwvuZOx7qRKt1rz0gAMh+ +1atnAsK3Z2inujqRevXjfIMCgYEAjy4BhPsd1wOZTISywKAKKl0uRdzQIBDfV//f +7rjgkOynggfrKPAvM7TdN4SyKDl4jlkhXZKfOI8c2KA4JndiWrpIsYeoqcAIZizi +Wp+Ei2UcHY5tQo4jXCtuGHLfZGawf0+ds7aMFlDnlxoV3uXTAhlbWtmUVyeK23DP +g2WADJECgYAPux2BixHtl0pYDgw2sk1wrV94+hBAVjxIXq5B1jABYP6vKYe6ry40 +BP26LVCcPDHSuhWBUYasKe3OFlXrcBRInnz8HvD0cPsZ2OUTw0muA98S0TL/NAz9 +WMY04UX0LkFroAmZ4OpsN5dnaYUyyLtE4fL1YzY4yaQm2cAjL4503g== +-----END RSA PRIVATE KEY----- diff --git a/tools/centos/etc/nginx/ssl/game.makeryang.com.pem b/tools/centos/etc/nginx/ssl/game.makeryang.com.pem new file mode 100644 index 0000000..8fef3e7 --- /dev/null +++ b/tools/centos/etc/nginx/ssl/game.makeryang.com.pem @@ -0,0 +1,61 @@ +-----BEGIN CERTIFICATE----- +MIIF/DCCBOSgAwIBAgIQBoJL0yXtOOlqcGZrSYZ7/jANBgkqhkiG9w0BAQsFADBu +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMS0wKwYDVQQDEyRFbmNyeXB0aW9uIEV2ZXJ5d2hlcmUg +RFYgVExTIENBIC0gRzIwHhcNMjQwMjE3MDAwMDAwWhcNMjQwNTE3MjM1OTU5WjAd +MRswGQYDVQQDExJnYW1lLm1ha2VyeWFuZy5jb20wggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQCM0NRb9ZiWly2pWrT6RHCSdX6lmxZY33myoSuGWzvTjsKd +agBX9HFRSPxog4JWAFf3XANc9JFW4+qa7oSpz8T7koi8sJnGDqGiPRpNX453X7sC +d7Y+AUBQ01NN41ikNQAiy96NBMFLGGlZi/H4wpeAYvgL3KwtEFh9k4XL2MbCx3mT +EzS2pljWMHLJfun8cAQlUJl7yN185myxmOiP409dEiK+xT687cu/Q+vvJja+xGLc +Br5FQIvjm3ydtF/1FEDUSQfGeae4bpBaeD9N3nFRsQSSt2t6LOofp/Txo0kCbJ4f +2QQXrUxTufF+kAbk+7YFyPuNmjR5cvP6gOMgqWeTAgMBAAGjggLlMIIC4TAfBgNV +HSMEGDAWgBR435GQX+7erPbFdevVTFVT7yRKtjAdBgNVHQ4EFgQU6CVLerV8rRvI +fdoqmcaWm4fsq7YwHQYDVR0RBBYwFIISZ2FtZS5tYWtlcnlhbmcuY29tMD4GA1Ud +IAQ3MDUwMwYGZ4EMAQIBMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNl +cnQuY29tL0NQUzAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG +CCsGAQUFBwMCMIGABggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9v +Y3NwLmRpZ2ljZXJ0LmNvbTBKBggrBgEFBQcwAoY+aHR0cDovL2NhY2VydHMuZGln +aWNlcnQuY29tL0VuY3J5cHRpb25FdmVyeXdoZXJlRFZUTFNDQS1HMi5jcnQwDAYD +VR0TAQH/BAIwADCCAX4GCisGAQQB1nkCBAIEggFuBIIBagFoAHYA7s3QZNXbGs7F +XLedtM0TojKHRny87N7DUUhZRnEftZsAAAGNtbUunQAABAMARzBFAiAoHm9oq5Du +j0gXKhJHx3CAUASFmepG+Jz5tEp5Zp/aUgIhAKH9B4MIkeX4XVg7g74me98+CBJp +dB3Fl71y13Lj0vK+AHUASLDja9qmRzQP5WoC+p0w6xxSActW3SyB2bu/qznYhHMA +AAGNtbUt/gAABAMARjBEAiAYaTJ6DJNwpYdjHaDuxLZNxDca+4iFb5s3ZH/g5v3R +3QIgT2V0+vR4/d0IS2X/BN9g2xtdXKM57AS4t1hl3nO6QpAAdwDatr9rP7W2Ip+b +wrtca+hwkXFsu1GEhTS9pD0wSNf7qwAAAY21tS3XAAAEAwBIMEYCIQCBAcmOf56D +/zT2t+M17f9HJCuaAAO640nSaEkC23p2jQIhAJbfBeNyZRUwz1hFbzsOMrTrRGIt +bLtxLEjydi/ChMMSMA0GCSqGSIb3DQEBCwUAA4IBAQCGwgJRgCUSzVHVsxFxHpEW +9U3iK9abAq215/wG4F1rXOrnlSXANxkyH/5LCbSvLWEAOiOnBQOIWx7dUcNqk6eq +oh6XF8IDm5U3VFLawpdYEevcn+L4iFGEMtZl368s4EBjLGt5sUsgwKpo4n+ttMVL +C7np4+ENPa1PS44PZGUEAWakeZwoTNo+5CVRl++XP9ce+PxcROhJ7/msfcf04s2C +NmzGIkP6xnDmgekGRcjkivbzqPttx75R5yr73voNW2UJ0XH+UWLWZClWnc5MIne8 +3n1bTFuKKeN15V6lOUSFl+DfdJ1C91Oxf03j9miYJ3nnxPgQYqqQTbisgLarUB4J +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIQDeD/te5iy2EQn2CMnO1e0zANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xNzExMjcxMjQ2NDBaFw0yNzExMjcxMjQ2NDBaMG4xCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xLTArBgNVBAMTJEVuY3J5cHRpb24gRXZlcnl3aGVyZSBEViBUTFMgQ0EgLSBH +MjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO8Uf46i/nr7pkgTDqnE +eSIfCFqvPnUq3aF1tMJ5hh9MnO6Lmt5UdHfBGwC9Si+XjK12cjZgxObsL6Rg1njv +NhAMJ4JunN0JGGRJGSevbJsA3sc68nbPQzuKp5Jc8vpryp2mts38pSCXorPR+sch +QisKA7OSQ1MjcFN0d7tbrceWFNbzgL2csJVQeogOBGSe/KZEIZw6gXLKeFe7mupn +NYJROi2iC11+HuF79iAttMc32Cv6UOxixY/3ZV+LzpLnklFq98XORgwkIJL1HuvP +ha8yvb+W6JislZJL+HLFtidoxmI7Qm3ZyIV66W533DsGFimFJkz3y0GeHWuSVMbI +lfsCAwEAAaOCAU8wggFLMB0GA1UdDgQWBBR435GQX+7erPbFdevVTFVT7yRKtjAf +BgNVHSMEGDAWgBROIlQgGJXm427mD/r6uRLtBhePOTAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8C +AQAwNAYIKwYBBQUHAQEEKDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp +Y2VydC5jb20wQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQu +Y29tL0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDBMBgNVHSAERTBDMDcGCWCGSAGG +/WwBAjAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BT +MAgGBmeBDAECATANBgkqhkiG9w0BAQsFAAOCAQEAoBs1eCLKakLtVRPFRjBIJ9LJ +L0s8ZWum8U8/1TMVkQMBn+CPb5xnCD0GSA6L/V0ZFrMNqBirrr5B241OesECvxIi +98bZ90h9+q/X5eMyOD35f8YTaEMpdnQCnawIwiHx06/0BfiTj+b/XQih+mqt3ZXe +xNCJqKexdiB2IWGSKcgahPacWkk/BAQFisKIFYEqHzV974S3FAz/8LIfD58xnsEN +GfzyIDkH3JrwYZ8caPTf6ZX9M1GrISN8HnWTtdNCH2xEajRa/h9ZBXjUyFKQrGk2 +n2hcLrfZSbynEC/pSw/ET7H5nWwckjmAJ1l9fcnbqkU/pf6uMQmnfl0JQjJNSg== +-----END CERTIFICATE----- diff --git a/tools/centos/etc/systemd/system/game.service b/tools/centos/etc/systemd/system/game.service new file mode 100644 index 0000000..d5897ff --- /dev/null +++ b/tools/centos/etc/systemd/system/game.service @@ -0,0 +1,13 @@ +[Unit] +Description=Game +After=syslog.target network.target + +[Service] +Type=simple +Environment=GODOT_SILENCE_ROOT_WARNING=1 +WorkingDirectory=/data/wwwroot/game/ +ExecStart=/data/wwwroot/game/server.x86_64 --headless +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/tools/centos/etc/systemd/system/server.service b/tools/centos/etc/systemd/system/server.service new file mode 100644 index 0000000..ae03be2 --- /dev/null +++ b/tools/centos/etc/systemd/system/server.service @@ -0,0 +1,12 @@ +[Unit] +Description=Server +After=syslog.target network.target + +[Service] +Type=simple +WorkingDirectory=/data/wwwroot/server/ +ExecStart=/data/wwwroot/server/main +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/tools/update.sh b/tools/update.sh new file mode 100755 index 0000000..a9eadcb --- /dev/null +++ b/tools/update.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +set -e + +# 复制Nginx、服务配置配置 +sudo cp -r ./tools/centos/* / + +# 复制后端服务到运行目录 +sudo cp -r ./server /data/wwwroot/ + +# 创建游戏引擎服务端运行目录 +if [ ! -d "/data/wwwroot/game" ]; then + mkdir -p /data/wwwroot/game +fi + +# 编译后端服务 +cd /data/wwwroot/server/ +/usr/local/go/bin/go env -w GOSUMDB=off +export GO111MODULE=on && export GOPROXY=https://goproxy.io && /usr/local/go/bin/go build main.go + +# 重启Nginx服务 +sudo systemctl restart nginx.service + +# 重启后端服务和游戏服务 +sudo systemctl daemon-reload +sudo systemctl restart server.service +sudo systemctl restart game.service \ No newline at end of file diff --git a/update.bat b/update.bat new file mode 100644 index 0000000..1938885 --- /dev/null +++ b/update.bat @@ -0,0 +1,5 @@ +@echo off + +scp -r ./engine/release/server* root@172.21.255.206:/data/wwwroot/game/ + +ssh root@172.21.255.206 "chmod +x /data/wwwroot/game/* && cd /opt/Engine2D && sudo ./tools/update.sh" \ No newline at end of file diff --git a/wiki/course/0001.md b/wiki/course/0001.md new file mode 100644 index 0000000..71938af --- /dev/null +++ b/wiki/course/0001.md @@ -0,0 +1,100 @@ +## 第一课 + +> 第一课时操作引导文档。 + +### 一、游戏资源下载 + +> 1、访问:[GitHub](https://www.github.com) + +> 2、下载安装Git:[Git](https://git-scm.com) + +````shell +# 生成GitHub SSH KEY +ssh-keygen -t rsa -C "你的GitHub登录账号" +```` + +```shell +git config -global user.name "你的GitHub用户名" +git config -global user.email "你的GitHub登录账号" +``` +```shell +# 下载游戏源码 +git clone --depth=1 git@github.com:makeryangcom/Engine2D.git +``` + +### 二、虚拟机的安装和配置 + +> 1、CentOS系统镜像下载地址:[CentOS-8.5.2111-x86_64-dvd1.iso](https://mirrors.aliyun.com/centos/8/isos/x86_64/CentOS-8.5.2111-x86_64-dvd1.iso) + +> 2、切换到root用户,密码为`root` + +```shell +su +``` + +> 3、修改SSH配置,防止后续SSH远程登录时因连接超时自动断开 + +```shell +vim /etc/ssh/sshd_config +``` + +> 4、获取虚拟机服务器内网IP地址 + +```shell +ifconfig +``` + +> 5、在本地电脑的命令行工具中通过SSH远程登录到虚拟机服务器 + +```shell +ssh root@服务器内网IP地址 +``` + +> 6、更新软件源 + +```shell +sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* +sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* +# 设置阿里云软件源 +wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo +# 清理缓存 +yum clean all +yum makecache +``` + +> 7、切换到root用户 + +```shell +yum update -y +``` + +> 8、安装常用的软件和组件 + +```shell +yum install -y vim curl git openssl openssl-devel +``` + +> 9、安装Nginx + +```shell +yum install -y nginx +``` + +``` bash +# 启动Nginx服务 +sudo systemctl start nginx.service +``` + +``` bash +# 设置Nginx服务开机启动 +sudo systemctl enable nginx.service +``` + +``` bash +# 常用维护命令-重启Nginx服务 +sudo systemctl restart nginx.service +# 常用维护命令-停止Nginx服务 +sudo systemctl stop nginx.service +# 常用维护命令-启动Nginx服务 +sudo systemctl start nginx.service +``` \ No newline at end of file