版本更新

This commit is contained in:
hahwu 2025-11-14 16:08:42 +08:00
parent 727acef7d6
commit b501d07c1c
32 changed files with 244 additions and 164 deletions

View File

@ -42,20 +42,32 @@ func AdminAdd(c *gin.Context) {
func AdminLogList(c *gin.Context) {
// 处理管理员日志列表请求
type param struct {
Page int `json:"page"`
PaseSize int `json:"pageSize"`
UserName string `json:"username"`
Opration string `json:"operation"`
}
var p param
if err := c.ShouldBindJSON(&p); err != nil {
failed(c, "Invalid input: "+err.Error())
return
}
List := []*model.AdminLog{}
db := util.MPool.GetGameDB()
if db == nil {
failed(c, "Failed to get database connection")
return
}
err := db.Select(&List, "SELECT * FROM admin_log ORDER BY createTime DESC")
err := db.Select(&List, "SELECT * FROM admin_log ORDER BY createTime DESC LIMIT ? OFFSET ?", p.PaseSize, (p.Page-1)*p.PaseSize)
if err != nil {
failed(c, "Failed to retrieve admin logs: "+err.Error())
return
}
var total int
db.Get(&total, "SELECT COUNT(*) FROM admin_log")
success(c, &model.Result{
Data: List,
Result: 0,
Data: List,
Total: total,
})
}

View File

@ -27,7 +27,7 @@ func failed(c *gin.Context, message string) {
func USSendInfo() {
c := cron.New()
// 每天12:10触发
_, err := c.AddFunc("15 12 * * *", func() {
_, err := c.AddFunc("15 13 * * *", func() {
feishu.SendOperationMsg2(common.US_APP_ID)
// 这里添加你的业务逻辑
})

BIN
data/data.db Normal file

Binary file not shown.

View File

@ -42,7 +42,7 @@ func Server() {
// 创建Client
cli := larkws.NewClient(data.APP_ID, data.APP_SECRET,
larkws.WithEventHandler(eventHandler),
larkws.WithLogLevel(larkcore.LogLevelDebug),
larkws.WithLogLevel(larkcore.LogLevelInfo),
)
fmt.Printf("Start Feishu server success\n")
// 启动客户端

1
go.mod
View File

@ -68,6 +68,7 @@ require (
github.com/xuri/efp v0.0.1 // indirect
github.com/xuri/excelize/v2 v2.10.0 // indirect
github.com/xuri/nfp v0.0.2-0.20250530014748-2ddeb826f9a9 // indirect
go.etcd.io/bbolt v1.4.3 // indirect
golang.org/x/arch v0.8.0 // indirect
golang.org/x/sys v0.37.0 // indirect
golang.org/x/text v0.30.0 // indirect

2
go.sum
View File

@ -227,6 +227,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.30/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo=
go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E=
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc=
golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys=

View File

@ -1,104 +0,0 @@
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] POST /api/auth/login --> backend/controller.Login (3 handlers)
[GIN-debug] GET /api/auth/Codes --> backend/controller.Codes (3 handlers)
[GIN-debug] POST /api/auth/phoneCode --> backend/controller.PhoneCode (3 handlers)
[GIN-debug] POST /api/auth/phoneLogin --> backend/controller.LoginCode (3 handlers)
[GIN-debug] POST /api/feishu/sendInfo --> backend/controller.FeishuSendInfo (3 handlers)
[GIN-debug] POST /api/feishu/sendInfo2 --> backend/controller.FeishuSendInfo2 (3 handlers)
[GIN-debug] POST /api/feishu/sendWeekInfo --> backend/controller.FeishuSendWeekInfo (3 handlers)
[GIN-debug] POST /api/feishu/updateApp --> backend/controller.FeishuUpdateApp (3 handlers)
[GIN-debug] POST /api/feishu/serverInfo --> backend/controller.FeishuServerInfo (3 handlers)
[GIN-debug] POST /api/feishu/notify --> backend/controller.FeishuNotify (3 handlers)
[GIN-debug] POST /api/feishu/notify/client --> backend/controller.FeishuNotifyClient (3 handlers)
[GIN-debug] POST /api/feishu/notify/order --> backend/controller.FeishuNotifyOrder (3 handlers)
[GIN-debug] POST /api/admin/list --> backend/controller.AdminList (4 handlers)
[GIN-debug] POST /api/admin/add --> backend/controller.AdminAdd (4 handlers)
[GIN-debug] POST /api/admin/log/list --> backend/controller.AdminLogList (4 handlers)
[GIN-debug] POST /api/log/user --> backend/controller.UserDetail (4 handlers)
[GIN-debug] POST /api/log/asset --> backend/controller.Asset (4 handlers)
[GIN-debug] POST /api/log/event --> backend/controller.Event (4 handlers)
[GIN-debug] POST /api/log/order --> backend/controller.Order (4 handlers)
[GIN-debug] POST /api/user/list --> backend/controller.UserList (4 handlers)
[GIN-debug] GET /api/user/info --> backend/controller.UserInfo (4 handlers)
[GIN-debug] POST /api/user/gm --> backend/controller.UserGM (4 handlers)
[GIN-debug] POST /api/user/ban --> backend/controller.UserBan (4 handlers)
[GIN-debug] POST /api/server/list --> backend/controller.AppList (4 handlers)
[GIN-debug] POST /api/server/serverList --> backend/controller.ServerList (4 handlers)
[GIN-debug] POST /api/server/addServer --> backend/controller.AddServer (4 handlers)
[GIN-debug] POST /api/server/nodeList --> backend/controller.NodeList (4 handlers)
[GIN-debug] POST /api/server/addNode --> backend/controller.AddNode (4 handlers)
[GIN-debug] POST /api/server/updateApp --> backend/controller.UpdateApp (4 handlers)
[GIN-debug] POST /api/server/updateAppFeishu --> backend/controller.UpdateAppFeishu (4 handlers)
[GIN-debug] POST /api/server/restart --> backend/controller.RestartServer (4 handlers)
[GIN-debug] POST /api/server/reload --> backend/controller.ReloadServer (4 handlers)
[GIN-debug] POST /api/statistics/level --> backend/controller.StatisticsLevel (4 handlers)
[GIN-debug] POST /api/statistics/order --> backend/controller.StatisticsOrder (4 handlers)
[GIN-debug] POST /api/statistics/info --> backend/controller.StatisticsInfo (4 handlers)
[GIN-debug] POST /api/statistics/heat --> backend/controller.StatisticsHeat (4 handlers)
[GIN-debug] POST /api/mail/send --> backend/controller.SendMail (4 handlers)
[GIN-debug] POST /api/mail/list --> backend/controller.MailList (4 handlers)
[GIN-debug] POST /api/mail/delete --> backend/controller.MailDelete (4 handlers)
[GIN-debug] POST /api/language/list --> backend/controller.Language (4 handlers)
[GIN-debug] POST /api/language/export --> backend/controller.LanguageExport (4 handlers)
[GIN-debug] POST /api/language/save --> backend/controller.LanguageSave (4 handlers)
[GIN-debug] POST /api/language/add --> backend/controller.LanguageAdd (4 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :5320
[GIN] 2025/11/10 - 17:24:59 | 401 | 0s | ::1 | GET "/api/user/info"
[GIN] 2025/11/10 - 17:24:59 | 404 | 0s | ::1 | POST "/api/auth/logout"
[GIN] 2025/11/10 - 17:25:11 | 200 | 151.2899ms | ::1 | POST "/api/auth/login"
[GIN] 2025/11/10 - 17:25:11 | 200 | 0s | ::1 | GET "/api/user/info"
[GIN] 2025/11/10 - 17:25:11 | 200 | 0s | ::1 | GET "/api/auth/Codes"
[GIN] 2025/11/10 - 17:25:12 | 200 | 445.1576ms | ::1 | POST "/api/statistics/info"
[GIN] 2025/11/10 - 17:25:25 | 200 | 13.3738348s | ::1 | POST "/api/statistics/heat"
[GIN] 2025/11/10 - 17:25:29 | 200 | 196.0188ms | ::1 | POST "/api/language/list"
[GIN] 2025/11/10 - 17:58:13 | 200 | 114.2944ms | ::1 | POST "/api/server/list"
[GIN] 2025/11/10 - 17:58:13 | 200 | 72.9498ms | ::1 | POST "/api/server/serverList"
[GIN] 2025/11/10 - 17:58:34 | 400 | 21.008933s | ::1 | POST "/api/user/list"
[GIN] 2025/11/10 - 17:58:46 | 200 | 19.7306399s | ::1 | POST "/api/user/list"
[GIN] 2025/11/10 - 17:58:56 | 200 | 344.7428ms | ::1 | POST "/api/language/list"
[GIN] 2025/11/10 - 17:58:58 | 200 | 54.8909ms | ::1 | POST "/api/server/list"
[GIN] 2025/11/10 - 17:58:58 | 200 | 79.213ms | ::1 | POST "/api/server/serverList"
[GIN] 2025/11/10 - 17:58:58 | 200 | 213.1083ms | ::1 | POST "/api/user/list"
[GIN] 2025/11/10 - 17:58:58 | 200 | 205.0455ms | ::1 | POST "/api/user/list"
2025/11/11 08:04:59 start statistics
2025/11/11 08:05:00 remain 2025-11-11 success
2025/11/11 08:05:01 remain 2025-11-10 success
2025/11/11 08:05:02 remain 2025-11-09 success
2025/11/11 08:05:03 remain 2025-11-08 success
2025/11/11 08:05:04 remain 2025-11-07 success
2025/11/11 08:05:05 remain 2025-11-06 success
2025/11/11 08:05:05 remain 2025-11-05 success
2025/11/11 08:05:06 remain 2025-11-04 success
2025/11/11 08:05:07 remain 2025-11-03 success
2025/11/11 08:05:08 remain 2025-11-02 success
2025/11/11 08:05:09 remain 2025-11-01 success
2025/11/11 08:05:10 remain 2025-10-31 success
2025/11/11 08:05:10 remain 2025-10-30 success
2025/11/11 08:05:11 remain 2025-10-29 success
2025/11/11 08:05:12 remain 2025-10-28 success
2025/11/11 08:05:13 remain 2025-10-27 success
2025/11/11 08:05:14 remain 2025-10-26 success
2025/11/11 08:05:15 remain 2025-10-25 success
2025/11/11 08:05:15 remain 2025-10-24 success
2025/11/11 08:05:16 remain 2025-10-23 success
2025/11/11 08:05:17 remain 2025-10-22 success
2025/11/11 08:05:18 remain 2025-10-21 success
2025/11/11 08:05:19 remain 2025-10-20 success
2025/11/11 08:05:20 remain 2025-10-19 success
2025/11/11 08:05:21 remain 2025-10-18 success
2025/11/11 08:05:21 remain 2025-10-17 success
2025/11/11 08:05:22 remain 2025-10-16 success
2025/11/11 08:05:23 remain 2025-10-15 success
2025/11/11 08:05:24 remain 2025-10-14 success
2025/11/11 08:05:24 remain 2025-10-13 success
2025/11/11 08:05:25 remain 2025-10-12 success
2025/11/11 08:05:25 end statistics
[GIN] 2025/11/11 - 09:46:47 | 200 | 667.9479ms | ::1 | POST "/api/user/list"
[GIN] 2025/11/11 - 09:46:50 | 200 | 504.1466ms | ::1 | POST "/api/log/user"

View File

@ -29,7 +29,7 @@ func init() {
// 让 gin 的日志也写入文件,并同时输出到控制台
gin.DefaultWriter = io.MultiWriter(file, os.Stdout)
gin.DefaultErrorWriter = io.MultiWriter(file, os.Stderr)
util.InitBBolt()
common.Init()
}

View File

@ -19,6 +19,7 @@ type Admin struct {
Role int `json:"role" db:"role"`
CreateTime int `json:"createTime" db:"createTime"`
UpdateTime int `json:"updateTime" db:"updateTime"`
Remark string `json:"remark" db:"remark"`
}
type AdminLog struct {
@ -42,9 +43,11 @@ func (a *Admin) List() (*Result, error) {
if err != nil {
return nil, fmt.Errorf("failed to scan rows: %v", err)
}
var total int
db.Get(&total, "SELECT COUNT(*) FROM admin")
return &Result{
Data: admins,
Result: 0,
Data: admins,
Total: total,
}, nil
}
@ -59,13 +62,15 @@ func (a *Admin) Add() (*Result, error) {
a.CreateTime = int(util.Now())
a.UpdateTime = a.CreateTime
a.Password, _ = util.Encrypt(a.Password) // 假设有一个加密函数
_, err := db.NamedExec("INSERT INTO admin (`username`, `password`, `phone`, `email`, `token`, `group`, `status`, `role`, `createTime`, `updateTime`, `expires`) VALUES (:username, :password, :phone, :email, :token, :group, :status, :role, :createTime, :updateTime, :expires)", a)
_, err := db.NamedExec("INSERT INTO admin (`username`, `password`, `phone`, `email`, `token`, `group`, `status`, `role`, `createTime`, `updateTime`, `expires`, `remark`) VALUES (:username, :password, :phone, :email, :token, :group, :status, :role, :createTime, :updateTime, :expires, :remark)", a)
if err != nil {
return nil, fmt.Errorf("failed to add admin: %v", err)
}
var total int
db.Get(&total, "SELECT COUNT(*) FROM admin")
return &Result{
Data: a,
Result: 0,
Data: a,
Total: total,
}, nil
}

View File

@ -86,7 +86,14 @@ func (l *LanguageMod) LanguageListAll() (map[string]interface{}, error) {
// 导出为 xlsx 文件
f := excelize.NewFile()
sheet := "Sheet1"
SaveTime, _ := util.GetLanguageLastUpdate()
ExportTime, _ := util.GetLanguageExportLastUpdate()
if SaveTime <= ExportTime {
return map[string]interface{}{
"code": 1,
"msg": "No changes since last export",
}, nil
}
// 写表头
headers := []string{"Id", "key", "English", "ChineseSimplified", "Portuguese"}
@ -135,7 +142,22 @@ func (l *LanguageMod) LanguageListAll() (map[string]interface{}, error) {
// 在 /data/docs 仓库中添加并提交该文件
repoDir := "/data/docs"
cmd := exec.Command("git", "pull")
cmd := exec.Command("git", "checkout", "main")
cmd.Dir = repoDir
if _, err := cmd.CombinedOutput(); err != nil {
// try to fetch and force-create/reset local main from origin/main
fetch := exec.Command("git", "fetch", "origin", "main")
fetch.Dir = repoDir
if fout, ferr := fetch.CombinedOutput(); ferr != nil {
return nil, fmt.Errorf("git fetch failed: %v: %s", ferr, string(fout))
}
cmd = exec.Command("git", "checkout", "-B", "main", "origin/main")
cmd.Dir = repoDir
if out2, err2 := cmd.CombinedOutput(); err2 != nil {
return nil, fmt.Errorf("git checkout main failed: %v: %s", err2, string(out2))
}
}
cmd = exec.Command("git", "pull")
cmd.Dir = repoDir
if out, err := cmd.CombinedOutput(); err != nil {
return nil, fmt.Errorf("git pull failed: %v: %s", err, string(out))
@ -165,9 +187,10 @@ func (l *LanguageMod) LanguageListAll() (map[string]interface{}, error) {
if out, err := cmd.CombinedOutput(); err != nil {
return nil, fmt.Errorf("git push failed: %v: %s", err, string(out))
}
util.SaveLanguageExportLastUpdate(util.Now())
// 将文件路径返回到调用方
return map[string]interface{}{
"data": languages,
// "data": languages,
"total": total,
}, nil
}
@ -189,6 +212,7 @@ func (l *LanguageMod) LanguageSave(langList []LanguageOp, admin string) error {
if _, err := Db.Exec("DELETE FROM language WHERE `key` LIKE ?", "%obsolete%"); err != nil {
return err
}
util.SaveLanguageLastUpdate(util.Now())
return nil
}

View File

@ -31,8 +31,9 @@ type Mail struct {
}
type Result struct {
Data interface{} `json:"data"`
Result int `json:"result"`
Data interface{} `json:"data"`
Total int `json:"total"`
OperationList []string `json:"operationList,omitempty"`
}
func (m *Mail) MailList() (*Result, error) {
@ -48,13 +49,15 @@ func (m *Mail) MailList() (*Result, error) {
if err != nil {
return nil, fmt.Errorf("failed to scan rows: %v", err)
}
var total int
Db.Get(&total, "SELECT COUNT(*) FROM system_mail_info")
for _, v := range mail {
v.AppId = m.AppId
v.ServerId = m.ServerId
}
return &Result{
Data: mail,
Result: 0,
Data: mail,
Total: total,
}, nil
}

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +1,2 @@
cd /data/admin_backend
GOOS=linux GOARCH=amd64 go build -o /data/admin_backend/release/shipping_service/shipping sdk/charge/main.go
GOOS=linux GOARCH=amd64 go build -o /data/admin_backend/release/shipping_service/shipping sdk/ship/main.go

Binary file not shown.

View File

@ -1,5 +0,0 @@
App:
name: "Admin Backend"
version: "1.0.0"
debug: true
port: 5250

View File

@ -1,5 +1,5 @@
App:
name: "Admin Backend"
version: "1.0.0"
debug: true
port: 5240
name: "Admin Backend"
version: "1.0.0"
debug: true
port: 5240

View File

@ -1,15 +1,34 @@
package tuyou
import "github.com/gin-gonic/gin"
import (
"backend/sdk/login/model/base"
"backend/util"
"github.com/gin-gonic/gin"
)
type TuyouModel struct {
}
func Login(c *gin.Context) {
type TuyouParam struct {
Uid string `json:"uid" binding:"required"`
}
var p base.Param
// read parameters from query string for GET requests
p.Uid = c.Query("uid")
p.Token = c.Query("token")
p.AppId = util.Int(c.Query("appId"))
p.AreaCode = util.Int(c.Query("areaCode"))
var p TuyouParam
if err := c.BindJSON(&p); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
if p.Uid == "" || p.Token == "" {
c.JSON(400, gin.H{"error": "missing uid or token"})
return
}
if err := (&TuyouModel{}).VerifyToken(p.Uid, p.Token); err != nil {
c.JSON(401, gin.H{"error": "invalid token"})
return
}
util.LoginResponse(c, p.AppId, p.AreaCode)
}
func (t *TuyouModel) VerifyToken(Uid string, Token string) error {
return nil
}

View File

@ -1,4 +1,4 @@
package chargecommon
package shipcommon
import (
"os"

4
sdk/ship/conf/app.yml Normal file
View File

@ -0,0 +1,4 @@
name: "Admin Backend"
version: "1.0.0"
debug: true
port: 5250

View File

@ -43,11 +43,11 @@ mysqls:
password: 'pUf9tft9GOPjV1z855Jf2DpB5NUpGEc_'
database: 'merge_pet_%d'
idleTimeout: Infinity
- host: 'rm-f8zd2030feam53n43io.mysql.rds.aliyuncs.com'
- host: '127.0.0.1'
name: 'log'
port: 3306
user: 'root'
password: 'GWFj1cHaqjpzvcsHBWTFtLWtm8MUZKROx_wvbV6jPg=='
password: 'ggOb-PzivEoB6BqQaN3_yFYlVBqYBkE_CS8FtITy_Q=='
database: 'game'
idleTimeout: Infinity

View File

@ -2,8 +2,10 @@ package main
import (
"backend/common"
"backend/sdk/charge/model/test"
"backend/sdk/charge/model/tuyou"
shipcommon "backend/sdk/ship/common"
"backend/sdk/ship/model/test"
"backend/sdk/ship/model/tuyou"
"fmt"
"io"
"log"
"os"
@ -35,5 +37,5 @@ func main() {
ChargeApi.POST("test/charge", test.Charge)
ChargeApi.POST("tuyou/charge", tuyou.Charge)
}
r.Run(":5420")
r.Run(fmt.Sprintf(":%d", shipcommon.AppConf.Port))
}

View File

@ -2,7 +2,7 @@ package test
import (
"backend/msg"
"backend/sdk/charge/model/base"
"backend/sdk/ship/model/base"
"backend/util"
"crypto/md5"
"encoding/json"

View File

@ -2,7 +2,7 @@ package tuyou
import (
"backend/msg"
"backend/sdk/charge/model/base"
"backend/sdk/ship/model/base"
"backend/util"
"crypto/md5"
"encoding/json"

View File

@ -45,12 +45,12 @@ func TestFeishu2(t *testing.T) {
}
func TestLogin(t *testing.T) {
ServerId, Host := util.GetUserInfo(1, 156, "test", "test")
fmt.Printf("ServerId:%d, Host:%s\n", ServerId, Host)
Port, Host, ServerId := util.GetUserInfo(1, 156, "test", "test")
fmt.Printf("ServerId:%d, Host:%s, Port:%d\n", ServerId, Host, Port)
}
func TestEncrypt(t *testing.T) {
str := "Z4rf7eZZe500dxa"
str := "usSdkMysql*1133"
enc, _ := util.Encrypt(str)
fmt.Println(enc)
}

78
util/bbolt.go Normal file
View File

@ -0,0 +1,78 @@
package util
import (
"os"
"path/filepath"
"go.etcd.io/bbolt"
)
var bucket *bbolt.DB
func InitBBolt() error {
// 初始化bbolt数据库的逻辑
// ensure directory exists before opening DB
dbPath := "data/data.db"
if err := os.MkdirAll(filepath.Dir(dbPath), 0o755); err != nil {
return err
}
db, err := bbolt.Open(dbPath, 0600, nil)
if err != nil {
return err
}
// keep the DB open for the package lifecycle
bucket = db
// ensure the "kv" bucket exists
err = bucket.Update(func(tx *bbolt.Tx) error {
_, err := tx.CreateBucketIfNotExists([]byte("kv"))
return err
})
if err != nil {
// cleanup on failure to initialize buckets
_ = bucket.Close()
bucket = nil
return err
}
return nil
}
func saveBBolt(key string, value interface{}) error {
newValue := String(value)
err := bucket.Update(func(tx *bbolt.Tx) error {
b := tx.Bucket([]byte("kv"))
return b.Put([]byte(key), []byte(newValue))
})
return err
}
func getBBolt(key string) (string, error) {
var value string
err := bucket.View(func(tx *bbolt.Tx) error {
b := tx.Bucket([]byte("kv"))
v := b.Get([]byte(key))
value = string(v)
return nil
})
return value, err
}
func SaveLanguageLastUpdate(timestamp interface{}) error {
return saveBBolt("language_last_update", timestamp)
}
func GetLanguageLastUpdate() (int, error) {
v, e := getBBolt("language_last_update")
return Int(v), e
}
func SaveLanguageExportLastUpdate(timestamp interface{}) error {
return saveBBolt("language_export_last_update", timestamp)
}
func GetLanguageExportLastUpdate() (int, error) {
v, e := getBBolt("language_export_last_update")
return Int(v), e
}

View File

@ -13,11 +13,11 @@ type ServerConfig struct {
func LoginResponse(c *gin.Context, AppId, AreaCode int) {
Uid := c.GetString("Uid")
Token := c.GetString("Token")
Port, Host := GetUserInfo(AppId, AreaCode, Uid, Token)
LoginSuccess(c, "login success", Port, Host)
Port, Host, ServerId := GetUserInfo(AppId, AreaCode, Uid, Token)
LoginSuccess(c, "login success", Port, Host, ServerId)
}
func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string, int) {
Db := MPool.GetGameDB()
defer Db.Close()
var ServerId int
@ -29,7 +29,7 @@ func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
}
ServerList := GetServerInfo(AppId, AreaCode)
if len(ServerList) == 0 {
return 0, ""
return 0, "", 0
}
if ServerId == 0 {
ServerId = ServerList[0].ServerId
@ -44,11 +44,11 @@ func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
}
}
if ServerId == 0 {
return 0, ""
return 0, "", 0
}
_, err := Db.Exec("insert into user (Uid, AppId, ServerId, AuthCode, CreateTime, UpdateTime) values (?, ?, ?, ?, ?, ?)", Uid, AppId, ServerId, Token, Now(), Now())
if err != nil {
return 0, ""
return 0, "", 0
}
} else {
for _, server := range ServerList {
@ -60,7 +60,7 @@ func GetUserInfo(AppId, AreaCode int, Uid, Token string) (int, string) {
}
Db.Exec("update user set AuthCode = ?, UpdateTime = ? where Uid = ?", Token, Now(), Uid)
}
return Port, Host
return Port, Host, ServerId
}
func GetServerInfo(AppId, AreaCode int) []ServerConfig {

View File

@ -110,6 +110,44 @@ func Int(a interface{}) int {
return 0
}
func String(a interface{}) string {
if a == nil {
return ""
}
switch v := a.(type) {
case string:
return v
case int:
return strconv.Itoa(v)
case int32:
return strconv.Itoa(int(v))
case int64:
return strconv.FormatInt(v, 10)
case float64:
return strconv.FormatFloat(v, 'f', -1, 64)
case []byte:
return string(v)
default:
rv := reflect.ValueOf(a)
if !rv.IsValid() {
return ""
}
// unwrap pointer
if rv.Kind() == reflect.Ptr && !rv.IsNil() {
rv = rv.Elem()
}
kind := rv.Kind()
// if it's a struct/map/slice/array convert to JSON
if kind == reflect.Struct || kind == reflect.Map || kind == reflect.Slice || kind == reflect.Array {
b, err := json.Marshal(a)
if err == nil {
return string(b)
}
}
return ""
}
}
func InArray(Id int, s []int) bool {
for _, v := range s {
if v == Id {
@ -423,11 +461,12 @@ func Success(c *gin.Context, message string) {
})
}
func LoginSuccess(c *gin.Context, message string, Port int, Host string) {
func LoginSuccess(c *gin.Context, message string, Port int, Host string, ServerId int) {
c.JSON(200, gin.H{
"code": 0,
"message": message,
"Port": Port,
"Host": Host,
"code": 0,
"message": message,
"Port": Port,
"Host": Host,
"ServerId": ServerId,
})
}