diff --git a/src/server/backend/server.go b/src/server/backend/server.go index 50296265..566e7527 100644 --- a/src/server/backend/server.go +++ b/src/server/backend/server.go @@ -1,106 +1,13 @@ package backend import ( - "context" "fmt" "net" - "server/db" - "server/game" - GoUtil "server/game_util" "server/gen-go/backend" "github.com/apache/thrift/lib/go/thrift" ) -type GameServiceHandler struct{} - -func NewGameServiceHandler() *GameServiceHandler { - return &GameServiceHandler{} -} - -func (h *GameServiceHandler) GetAdminInfo(ctx context.Context, id int32) (*backend.ResAdminInfo, error) { - player := game.G_GameLogicPtr.GetPlayer(int64(id)) - online := true - if player == nil { - player = new(game.Player) - player.M_DwUin = int64(id) - player.InitPlayerOnly() - player.ZeroUpdate(nil) - online = false - } - res := &backend.ResAdminInfo{} - res.Name = player.GetBaseMod().NickName - res.UID = player.M_DwUin - res.AreaId = int32(player.GetDecorateMod().GetAreaId()) - res.Face = int32(player.GetFaceMod().SetId) - res.Charge = player.GetChargeMod().Charge - res.MaxCharge = player.GetChargeMod().MaxCharge - res.Level = int32(player.GetPlayerBaseMod().GetLevel()) - res.Diamond = int32(player.GetPlayerBaseMod().GetDiamond()) - res.Star = int32(player.GetPlayerBaseMod().GetStar()) - res.Energy = int32(player.GetPlayerBaseMod().GetEnergy()) - res.UserName = player.GetPlayerBaseMod().GetName() - res.LoginTime = player.GetBaseMod().LoginTime - res.Cumulative = int32(player.GetBaseMod().Cumulative) - res.RegisterTime = int32(player.GetPlayerBaseMod().GetRegisterTime()) - res.TodayCumulative = int32(player.GetBaseMod().TodayCumulative) - res.Ban = int8(db.GetPlayerBan(player.GetBaseMod().Account)) - if online { - res.Cumulative = int32(int64(player.GetBaseMod().Cumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) - res.TodayCumulative = int32(int64(player.GetBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) - } - res.Code = player.GetBaseMod().AddCode - res.ChessMap = player.GetChessMod().ChessMap - resActLog := make([]*backend.Actlog, 0, len(player.GetFriendMod().ActivityLog)) - for _, log := range player.GetFriendMod().ActivityLog { - resActLog = append(resActLog, &backend.Actlog{ - Type: int8(log.Type), - Time: log.Time, - Param: log.Param, - }) - } - res.ActLog = resActLog - friendList := player.GetFriendMod().NewFriendList - type friendInfo struct { - Uid int64 - NickName string - Avatar int - Level int - LogoutTime int64 - LoginTime int64 - } - resFriendList := make([]*backend.FriendInfo, 0, len(friendList)) - for v := range friendList { - ps := game.G_GameLogicPtr.GetSimplePlayerByUid(v) - if ps == nil { - continue - } - resFriendList = append(resFriendList, &backend.FriendInfo{ - UID: int64(v), - NickName: ps.Name, - Face: int32(ps.Face), - Level: int32(ps.Level), - LogoutTime: ps.Loginout, - LoginTime: ps.Login, - }) - } - res.FriendList = resFriendList - OrderMap := make(map[int32]*backend.OrderInfo) - Index := 0 - for k, v := range player.GetOrderMod().OrderList { - OrderMap[int32(Index)] = &backend.OrderInfo{ - ID: int32(k), - Type: int32(v.Type), - Time: v.Timestamp, - ChessId: GoUtil.IntSliceToString(v.MergeId), - Diff: int8(v.Diff), - } - Index++ - } - res.OrderList = OrderMap - return res, nil -} - func Start() { addr := net.JoinHostPort("localhost", "9090") handler := NewGameServiceHandler() diff --git a/src/server/backend/sever_handler.go b/src/server/backend/sever_handler.go new file mode 100644 index 00000000..92f36209 --- /dev/null +++ b/src/server/backend/sever_handler.go @@ -0,0 +1,146 @@ +package backend + +import ( + "context" + "server/db" + "server/game" + "server/game/mod/msg" + GoUtil "server/game_util" + "server/gamedata" + "server/gen-go/backend" + "server/pkg/github.com/name5566/leaf/log" +) + +type GameServiceHandler struct{} + +func NewGameServiceHandler() *GameServiceHandler { + return &GameServiceHandler{} +} + +func (h *GameServiceHandler) ReqPlayerInfo(ctx context.Context, id int64) (*backend.ResAdminInfo, error) { + player := game.G_GameLogicPtr.GetPlayer(int64(id)) + online := true + if player == nil { + player = new(game.Player) + player.M_DwUin = int64(id) + player.InitPlayerOnly() + player.ZeroUpdate(nil) + online = false + } + res := &backend.ResAdminInfo{} + res.Name = player.GetBaseMod().NickName + res.UID = player.M_DwUin + res.AreaId = int32(player.GetDecorateMod().GetAreaId()) + res.Face = int32(player.GetFaceMod().SetId) + res.Charge = player.GetChargeMod().Charge + res.MaxCharge = player.GetChargeMod().MaxCharge + res.Level = int32(player.GetPlayerBaseMod().GetLevel()) + res.Diamond = int32(player.GetPlayerBaseMod().GetDiamond()) + res.Star = int32(player.GetPlayerBaseMod().GetStar()) + res.Energy = int32(player.GetPlayerBaseMod().GetEnergy()) + res.UserName = player.GetPlayerBaseMod().GetName() + res.LoginTime = player.GetBaseMod().LoginTime + res.Cumulative = int32(player.GetBaseMod().Cumulative) + res.RegisterTime = int32(player.GetPlayerBaseMod().GetRegisterTime()) + res.TodayCumulative = int32(player.GetBaseMod().TodayCumulative) + res.Ban = int8(db.GetPlayerBan(player.GetBaseMod().Account)) + if online { + res.Cumulative = int32(int64(player.GetBaseMod().Cumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) + res.TodayCumulative = int32(int64(player.GetBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.GetBaseMod().LoginTime)) + } + res.Code = player.GetBaseMod().AddCode + res.ChessMap = player.GetChessMod().ChessMap + resActLog := make([]*backend.Actlog, 0, len(player.GetFriendMod().ActivityLog)) + for _, log := range player.GetFriendMod().ActivityLog { + resActLog = append(resActLog, &backend.Actlog{ + Type: int8(log.Type), + Time: log.Time, + Param: log.Param, + }) + } + res.ActLog = resActLog + friendList := player.GetFriendMod().NewFriendList + type friendInfo struct { + Uid int64 + NickName string + Avatar int + Level int + LogoutTime int64 + LoginTime int64 + } + resFriendList := make([]*backend.FriendInfo, 0, len(friendList)) + for v := range friendList { + ps := game.G_GameLogicPtr.GetSimplePlayerByUid(v) + if ps == nil { + continue + } + resFriendList = append(resFriendList, &backend.FriendInfo{ + UID: int64(v), + NickName: ps.Name, + Face: int32(ps.Face), + Level: int32(ps.Level), + LogoutTime: ps.Loginout, + LoginTime: ps.Login, + }) + } + res.FriendList = resFriendList + OrderMap := make(map[int32]*backend.OrderInfo) + Index := 0 + for k, v := range player.GetOrderMod().OrderList { + OrderMap[int32(Index)] = &backend.OrderInfo{ + ID: int32(k), + Type: int32(v.Type), + Time: v.Timestamp, + ChessId: GoUtil.IntSliceToString(v.MergeId), + Diff: int8(v.Diff), + } + Index++ + } + res.OrderList = OrderMap + return res, nil +} + +func (h *GameServiceHandler) ReqReloadServerMail(ctx context.Context) (*backend.ResMessage, error) { + game.G_GameLogicPtr.MailMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL_RELOAD}) + game.G_GameLogicPtr.NotifyAll(&msg.Msg{Type: msg.HANDLE_TYPE_MAIL}) + log.Debug("ReqReloadServerMail success") + return &backend.ResMessage{ + Code: 0, + }, nil +} + +func (h *GameServiceHandler) ReqConfigReload(ctx context.Context) (*backend.ResMessage, error) { + gamedata.Reload() + return &backend.ResMessage{ + Code: 0, + }, nil +} + +func (h *GameServiceHandler) ReqAdminGm(ctx context.Context, uid int64, command string) (*backend.ResMessage, error) { + player := game.G_GameLogicPtr.GetPlayer(uid) + if player == nil { + return &backend.ResMessage{ + Code: 1, + Msg: "player not online", + }, nil + } + player.Lock() + defer player.UnLock() + err := game.ReqGmCommand_(player, command) + if err != nil { + return &backend.ResMessage{ + Code: 1, + Msg: err.Error(), + }, nil + } + return &backend.ResMessage{ + Code: 0, + }, nil +} + +func (h *GameServiceHandler) ReqAdminBan(ctx context.Context, uid int64, banTime int64) (*backend.ResMessage, error) { + db.UpdatePlayerBan(uid, banTime) + return &backend.ResMessage{ + Code: 0, + }, nil +} diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index c1610c2e..e273216e 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1339,3 +1339,11 @@ func CheckPlayerLose(Uid int) bool { } return false } + +func (p *Player) Lock() { + p.lock.Lock() +} + +func (p *Player) UnLock() { + p.lock.Unlock() +}