公会加载数据库数据
This commit is contained in:
parent
574ac6c50b
commit
651f9ba312
@ -36,29 +36,43 @@ PRIMARY KEY (`idx`),
|
|||||||
UNIQUE KEY `friend_req` (`sender_account_id`,`receiver_account_id`)
|
UNIQUE KEY `friend_req` (`sender_account_id`,`receiver_account_id`)
|
||||||
) COMMENT "等待验证的好友请求";
|
) COMMENT "等待验证的好友请求";
|
||||||
|
|
||||||
|
CREATE TABLE `t_friend_blocked` (
|
||||||
|
`idx` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
|
`account_id` varchar(60) COLLATE utf8_bin NOT NULL,
|
||||||
|
`blocked_account_id` varchar(60) COLLATE utf8_bin NOT NULL,
|
||||||
|
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||||
|
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||||
|
PRIMARY KEY (`idx`),
|
||||||
|
UNIQUE KEY `blocked_friend` (`account_id`,`blocked_account_id`)
|
||||||
|
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='好友黑名单';
|
||||||
|
|
||||||
-- 公会相关 --
|
-- 公会相关 --
|
||||||
drop table if exists t_guild;
|
drop table if exists t_guild;
|
||||||
CREATE TABLE `t_guild` (
|
CREATE TABLE `t_guild` (
|
||||||
`idx` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
`idx` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
|
`guild_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '公会id',
|
||||||
`name` varchar(48) NOT NULL,
|
`name` varchar(48) NOT NULL,
|
||||||
`leader_account_id` varchar(60) NOT NULL,
|
`leader_account_id` varchar(60) NOT NULL,
|
||||||
`max_members` int(11) DEFAULT '0',
|
`max_members` int(11) DEFAULT '0',
|
||||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||||
PRIMARY KEY (`idx`),
|
PRIMARY KEY (`idx`),
|
||||||
UNIQUE KEY `guild_name` (`name`,`leader_account_id`)
|
UNIQUE KEY `idx_guild_id` (`guild_id`),
|
||||||
|
KEY `idx_guild_name` (name),
|
||||||
|
KEY `idx_guild_leader` (leader_account_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会表';
|
||||||
|
|
||||||
drop table if exists `t_guild_members`;
|
drop table if exists `t_guild_members`;
|
||||||
CREATE TABLE `t_guild_members` (
|
CREATE TABLE `t_guild_members` (
|
||||||
|
`idx` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
`guild_id` bigint(20) NOT NULL,
|
`guild_id` bigint(20) NOT NULL,
|
||||||
`account_id` varchar(60) COLLATE utf8_bin NOT NULL,
|
`account_id` varchar(60) COLLATE utf8_bin NOT NULL,
|
||||||
`level` tinyint(4) DEFAULT '0' COMMENT '成员阶级1会长,2干部,3群众',
|
`level` tinyint(4) DEFAULT '0' COMMENT '成员阶级1会长,2干部,3群众',
|
||||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||||
PRIMARY KEY (`guild_id`,`account_id`),
|
PRIMARY KEY (`idx`),
|
||||||
KEY `idx_account_id` (`account_id`),
|
UNIQUE KEY `idx_guild_members` (`guild_id`,`account_id`),
|
||||||
KEY `createtime` (`createtime`)
|
KEY `idx_account_id` (`account_id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会成员表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会成员表';
|
||||||
|
|
||||||
drop table if exists `t_guild_logs`;
|
drop table if exists `t_guild_logs`;
|
||||||
@ -71,17 +85,19 @@ CREATE TABLE `t_guild_logs` (
|
|||||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||||
PRIMARY KEY (`idx`),
|
PRIMARY KEY (`idx`),
|
||||||
KEY `guild_name` (`guild_id`,`account_id`, log_type),
|
KEY `idx_guild_log` (`guild_id`,log_type, `account_id`),
|
||||||
KEY `createtime` (`createtime`)
|
KEY `idx_createtime` (`createtime`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会日志表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会日志表';
|
||||||
|
|
||||||
drop table if exists `t_guild_pending_request`;
|
drop table if exists `t_guild_pending_request`;
|
||||||
CREATE TABLE `t_guild_pending_request` (
|
CREATE TABLE `t_guild_pending_request` (
|
||||||
|
`idx` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增id',
|
||||||
`guild_id` bigint(20) NOT NULL,
|
`guild_id` bigint(20) NOT NULL,
|
||||||
`account_id` varchar(60) COLLATE utf8_bin NOT NULL,
|
`account_id` varchar(60) COLLATE utf8_bin NOT NULL,
|
||||||
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
`createtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建时间',
|
||||||
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
`modifytime` int(11) NOT NULL DEFAULT '0' COMMENT '修改时间',
|
||||||
PRIMARY KEY (`guild_id`,`account_id`),
|
PRIMARY KEY (`idx`),
|
||||||
KEY `account_id` (`account_id`),
|
UNIQUE KEY `idx_guild_pending_request`(`guild_id`,`account_id`),
|
||||||
KEY `createtime` (`createtime`)
|
KEY `idx_account_id` (`account_id`),
|
||||||
|
KEY `idx_createtime` (`createtime`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会申请表'
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='公会申请表'
|
@ -2,10 +2,10 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"cs"
|
"cs"
|
||||||
"ss"
|
|
||||||
"f5"
|
"f5"
|
||||||
"mt"
|
"mt"
|
||||||
"q5"
|
"q5"
|
||||||
|
"ss"
|
||||||
)
|
)
|
||||||
|
|
||||||
type App struct {
|
type App struct {
|
||||||
@ -24,6 +24,7 @@ func (this *App) Init() {
|
|||||||
handlerMgr.init()
|
handlerMgr.init()
|
||||||
playerMgr.init()
|
playerMgr.init()
|
||||||
friendMgr.init()
|
friendMgr.init()
|
||||||
|
guildMgr.init()
|
||||||
wspListener.init()
|
wspListener.init()
|
||||||
httpListener.init()
|
httpListener.init()
|
||||||
}
|
}
|
||||||
@ -73,9 +74,8 @@ func (this *App) addNetMsg(hdr *f5.MsgHdr) {
|
|||||||
f5.GetApp().NotifyLoopCond()
|
f5.GetApp().NotifyLoopCond()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func (this *App) registerDataSources() {
|
func (this *App) registerDataSources() {
|
||||||
f5.GetGoStyleDb().RegisterDataSource(
|
f5.GetJsStyleDb().RegisterDataSource(
|
||||||
GAME_DB,
|
GAME_DB,
|
||||||
mt.Table.GameDb.GetById(0).GetHost(),
|
mt.Table.GameDb.GetById(0).GetHost(),
|
||||||
mt.Table.GameDb.GetById(0).GetPort(),
|
mt.Table.GameDb.GetById(0).GetPort(),
|
||||||
@ -83,7 +83,7 @@ func (this *App) registerDataSources() {
|
|||||||
mt.Table.GameDb.GetById(0).GetPasswd(),
|
mt.Table.GameDb.GetById(0).GetPasswd(),
|
||||||
mt.Table.GameDb.GetById(0).GetDatabase(),
|
mt.Table.GameDb.GetById(0).GetDatabase(),
|
||||||
30)
|
30)
|
||||||
f5.GetGoStyleDb().RegisterDataSource(
|
f5.GetJsStyleDb().RegisterDataSource(
|
||||||
FRIEND_DB,
|
FRIEND_DB,
|
||||||
mt.Table.FriendDb.GetById(0).GetHost(),
|
mt.Table.FriendDb.GetById(0).GetHost(),
|
||||||
mt.Table.FriendDb.GetById(0).GetPort(),
|
mt.Table.FriendDb.GetById(0).GetPort(),
|
||||||
|
@ -6,3 +6,6 @@ var playerMgr = new(PlayerMgr)
|
|||||||
var handlerMgr = new(HandlerMgr)
|
var handlerMgr = new(HandlerMgr)
|
||||||
var httpListener = new(HttpListener)
|
var httpListener = new(HttpListener)
|
||||||
var friendMgr = new(FriendsMgr)
|
var friendMgr = new(FriendsMgr)
|
||||||
|
|
||||||
|
// var guildMgr = new(GuildMgr)
|
||||||
|
var guildMgr = NewGuildMgr()
|
||||||
|
@ -8,16 +8,19 @@ import (
|
|||||||
"mt"
|
"mt"
|
||||||
"q5"
|
"q5"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
FriendMemberCount = 200
|
FriendMemberCount = 200
|
||||||
PendingReqCount = 20
|
PendingReqCount = 20
|
||||||
|
BlockedUserCount = 50
|
||||||
)
|
)
|
||||||
|
|
||||||
type FriendsMgr struct {
|
type FriendsMgr struct {
|
||||||
cs.MsgHandlerImpl
|
cs.MsgHandlerImpl
|
||||||
|
mu sync.RWMutex
|
||||||
users map[string]*User // AccountId -> 用户
|
users map[string]*User // AccountId -> 用户
|
||||||
searchCaches map[string]SearchCache // SearchKeyword -> 好友搜索结果 []*User
|
searchCaches map[string]SearchCache // SearchKeyword -> 好友搜索结果 []*User
|
||||||
friendships map[string][]*Friendship // AccountId -> 好友关系列表 []*Friendship
|
friendships map[string][]*Friendship // AccountId -> 好友关系列表 []*Friendship
|
||||||
@ -251,6 +254,9 @@ func (fm *FriendsMgr) rejectFriendRequest(account1Id string, account2Id string)
|
|||||||
|
|
||||||
// deleteFriendShip 删除好友
|
// deleteFriendShip 删除好友
|
||||||
func (fm *FriendsMgr) deleteFriendShip(account1ID, account2ID string) error {
|
func (fm *FriendsMgr) deleteFriendShip(account1ID, account2ID string) error {
|
||||||
|
fm.mu.Lock()
|
||||||
|
defer fm.mu.Unlock()
|
||||||
|
|
||||||
user1Friendships := fm.friendships[account1ID]
|
user1Friendships := fm.friendships[account1ID]
|
||||||
user2Friendships := fm.friendships[account2ID]
|
user2Friendships := fm.friendships[account2ID]
|
||||||
|
|
||||||
|
@ -8,14 +8,14 @@ type GuildMember struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Guild struct {
|
type Guild struct {
|
||||||
ID int
|
GuildId int64
|
||||||
Name string
|
Name string
|
||||||
LeaderID string
|
LeaderID string
|
||||||
Members []GuildMember
|
Members []GuildMember
|
||||||
MaxMembers int
|
MaxMembers int
|
||||||
}
|
}
|
||||||
type GuildLog struct {
|
type GuildLog struct {
|
||||||
GuildId int
|
GuildId int64
|
||||||
AccountId string
|
AccountId string
|
||||||
LogType uint16
|
LogType uint16
|
||||||
Content string
|
Content string
|
||||||
@ -41,11 +41,11 @@ func (g *Guild) GetMember(accountId string) (*GuildMember, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// AddMember 添加成员
|
// AddMember 添加成员
|
||||||
func (g *Guild) AddMember(member GuildMember) error {
|
func (g *Guild) AddMember(member *GuildMember) error {
|
||||||
if len(g.Members) >= g.MaxMembers {
|
if len(g.Members) >= g.MaxMembers {
|
||||||
return errors.New("guild is full")
|
return errors.New("guild is full")
|
||||||
}
|
}
|
||||||
g.Members = append(g.Members, member)
|
g.Members = append(g.Members, *member)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,67 +3,117 @@ package main
|
|||||||
import (
|
import (
|
||||||
"cs"
|
"cs"
|
||||||
"errors"
|
"errors"
|
||||||
|
"f5"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"q5"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GuildMgr struct {
|
type GuildMgr struct {
|
||||||
cs.MsgHandlerImpl
|
cs.MsgHandlerImpl
|
||||||
Guilds map[int]*Guild // 公会ID -> 公会列表
|
Guilds map[int64]*Guild // 公会ID -> 公会列表
|
||||||
PendingAccountIds map[int][]string // 公会ID -> 申请者账户ID列表
|
PendingAccountIds map[int64][]string // 公会ID -> 申请者账户ID列表
|
||||||
Logs map[int][]*GuildLog // 公会ID -> 公会日志
|
Logs map[int64][]*GuildLog // 公会ID -> 公会日志
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGuildMgr() *GuildMgr {
|
func NewGuildMgr() *GuildMgr {
|
||||||
return &GuildMgr{
|
return &GuildMgr{
|
||||||
Guilds: make(map[int]*Guild),
|
Guilds: make(map[int64]*Guild),
|
||||||
PendingAccountIds: make(map[int][]string),
|
PendingAccountIds: make(map[int64][]string),
|
||||||
Logs: make(map[int][]*GuildLog),
|
Logs: make(map[int64][]*GuildLog),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var guildID = 0
|
func (gm *GuildMgr) init() {
|
||||||
|
// 加载公会
|
||||||
|
gm.loadGuildFromDB()
|
||||||
|
// 加载公会成员
|
||||||
|
gm.loadGuildMemberFromDB()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gm *GuildMgr) loadGuildFromDB() {
|
||||||
|
fields := []string{"guild_id", "name", "leader_account_id", "max_members"}
|
||||||
|
f5.GetJsStyleDb().Select(
|
||||||
|
FRIEND_DB,
|
||||||
|
"t_guild",
|
||||||
|
fields,
|
||||||
|
[][]string{},
|
||||||
|
gm.loadGuildFromDBResult,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gm *GuildMgr) loadGuildFromDBResult(err error, rows *f5.DataSet) {
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("loadGuildFromDBResult err:%v \n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for rows.Next() {
|
||||||
|
var (
|
||||||
|
guildId int64
|
||||||
|
name string
|
||||||
|
leaderAccountId string
|
||||||
|
maxMembers int
|
||||||
|
)
|
||||||
|
guildId = q5.ToInt64(*rows.GetByIndex(0))
|
||||||
|
name = q5.ToString(*rows.GetByIndex(1))
|
||||||
|
leaderAccountId = q5.ToString(*rows.GetByIndex(2))
|
||||||
|
maxMembers = int(q5.ToInt32(*rows.GetByIndex(3)))
|
||||||
|
|
||||||
|
newGuild := &Guild{
|
||||||
|
GuildId: guildId,
|
||||||
|
Name: name,
|
||||||
|
LeaderID: leaderAccountId,
|
||||||
|
MaxMembers: maxMembers,
|
||||||
|
}
|
||||||
|
// push to gm.guilds
|
||||||
|
gm.Guilds[guildId] = newGuild
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("loadGuildFromDB %v, len:%d\n", gm.Guilds, len(gm.Guilds))
|
||||||
|
fmt.Printf("loadGuildFromDB Finished")
|
||||||
|
}
|
||||||
|
|
||||||
// CreateGuild 创建公会
|
// CreateGuild 创建公会
|
||||||
func (gm *GuildMgr) CreateGuild(name string, leaderID string, maxMembers int) (int, error) {
|
func (gm *GuildMgr) CreateGuild(name string, leaderID string, maxMembers int) (int64, error) {
|
||||||
|
guildId := f5.GetApp().NewUuid()
|
||||||
|
|
||||||
if maxMembers <= 0 {
|
if maxMembers <= 0 {
|
||||||
return 0, errors.New("invalid maxMembers")
|
return 0, errors.New("invalid maxMembers")
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, exists := gm.Guilds[guildID]; exists {
|
if _, exists := gm.Guilds[guildId]; exists {
|
||||||
return 0, errors.New("guild already exists")
|
return 0, errors.New("guild already exists")
|
||||||
}
|
}
|
||||||
guildID++
|
|
||||||
|
|
||||||
newGuild := &Guild{
|
newGuild := &Guild{
|
||||||
ID: guildID,
|
GuildId: guildId,
|
||||||
Name: name,
|
Name: name,
|
||||||
LeaderID: leaderID,
|
LeaderID: leaderID,
|
||||||
MaxMembers: maxMembers,
|
MaxMembers: maxMembers,
|
||||||
}
|
}
|
||||||
|
|
||||||
gm.Guilds[guildID] = newGuild
|
gm.Guilds[guildId] = newGuild
|
||||||
return guildID, nil
|
return guildId, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ApplyToGuild 申请加入公会
|
// ApplyToGuild 申请加入公会
|
||||||
func (gm *GuildMgr) ApplyToGuild(guildID int, applicantAccountId string) error {
|
func (gm *GuildMgr) ApplyToGuild(guildId int64, applicantAccountId string) error {
|
||||||
if _, exists := gm.Guilds[guildID]; !exists {
|
if _, exists := gm.Guilds[guildId]; !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
guild := gm.Guilds[guildID]
|
guild := gm.Guilds[guildId]
|
||||||
if len(guild.Members) >= guild.MaxMembers {
|
if len(guild.Members) >= guild.MaxMembers {
|
||||||
return errors.New("guild is full")
|
return errors.New("guild is full")
|
||||||
}
|
}
|
||||||
|
|
||||||
gm.PendingAccountIds[guildID] = append(gm.PendingAccountIds[guildID], applicantAccountId)
|
gm.PendingAccountIds[guildId] = append(gm.PendingAccountIds[guildId], applicantAccountId)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ApproveApplication 批准申请加入公会
|
// ApproveApplication 批准申请加入公会
|
||||||
func (gm *GuildMgr) ApproveApplication(guildID int, applicantAccountId string) error {
|
func (gm *GuildMgr) ApproveApplication(guildId int64, applicantAccountId string) error {
|
||||||
guild, exists := gm.Guilds[guildID]
|
guild, exists := gm.Guilds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
@ -77,7 +127,7 @@ func (gm *GuildMgr) ApproveApplication(guildID int, applicantAccountId string) e
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pendingAccountIds, pendingExists := gm.PendingAccountIds[guildID]
|
pendingAccountIds, pendingExists := gm.PendingAccountIds[guildId]
|
||||||
if !pendingExists {
|
if !pendingExists {
|
||||||
return errors.New("no pending applications for this guild")
|
return errors.New("no pending applications for this guild")
|
||||||
}
|
}
|
||||||
@ -85,11 +135,11 @@ func (gm *GuildMgr) ApproveApplication(guildID int, applicantAccountId string) e
|
|||||||
for i, accountId := range pendingAccountIds {
|
for i, accountId := range pendingAccountIds {
|
||||||
if accountId == applicantAccountId {
|
if accountId == applicantAccountId {
|
||||||
newMember := GuildMember{AccountId: applicantAccountId, Level: 3}
|
newMember := GuildMember{AccountId: applicantAccountId, Level: 3}
|
||||||
err := guild.AddMember(newMember)
|
err := guild.AddMember(&newMember)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
gm.PendingAccountIds[guildID] = append(pendingAccountIds[:i], pendingAccountIds[i+1:]...)
|
gm.PendingAccountIds[guildId] = append(pendingAccountIds[:i], pendingAccountIds[i+1:]...)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,15 +148,15 @@ func (gm *GuildMgr) ApproveApplication(guildID int, applicantAccountId string) e
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RejectApplication 拒绝申请加入公会
|
// RejectApplication 拒绝申请加入公会
|
||||||
func (gm *GuildMgr) RejectApplication(guildID int, applicantAccountId string) error {
|
func (gm *GuildMgr) RejectApplication(guildId int64, applicantAccountId string) error {
|
||||||
pendingAccountIds, exists := gm.PendingAccountIds[guildID]
|
pendingAccountIds, exists := gm.PendingAccountIds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("no pending applications for this guild")
|
return errors.New("no pending applications for this guild")
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, accountId := range pendingAccountIds {
|
for i, accountId := range pendingAccountIds {
|
||||||
if accountId == applicantAccountId {
|
if accountId == applicantAccountId {
|
||||||
gm.PendingAccountIds[guildID] = append(pendingAccountIds[:i], pendingAccountIds[i+1:]...)
|
gm.PendingAccountIds[guildId] = append(pendingAccountIds[:i], pendingAccountIds[i+1:]...)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,8 +165,8 @@ func (gm *GuildMgr) RejectApplication(guildID int, applicantAccountId string) er
|
|||||||
}
|
}
|
||||||
|
|
||||||
// JoinGuild 可直接加入公会
|
// JoinGuild 可直接加入公会
|
||||||
func (gm *GuildMgr) JoinGuild(guildID int, memberID string) error {
|
func (gm *GuildMgr) JoinGuild(guildId int64, memberID string) error {
|
||||||
guild, exists := gm.Guilds[guildID]
|
guild, exists := gm.Guilds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
@ -131,8 +181,8 @@ func (gm *GuildMgr) JoinGuild(guildID int, memberID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// LeaveGuild 离开公会
|
// LeaveGuild 离开公会
|
||||||
func (gm *GuildMgr) LeaveGuild(guildID int, memberID string) error {
|
func (gm *GuildMgr) LeaveGuild(guildId int64, memberID string) error {
|
||||||
guild, exists := gm.Guilds[guildID]
|
guild, exists := gm.Guilds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
@ -151,8 +201,8 @@ func (gm *GuildMgr) LeaveGuild(guildID int, memberID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DismissMember 开除成员 踢出
|
// DismissMember 开除成员 踢出
|
||||||
func (gm *GuildMgr) DismissMember(guildID int, operatorAccountId, memberID string) error {
|
func (gm *GuildMgr) DismissMember(guildId int64, operatorAccountId, memberID string) error {
|
||||||
guild, exists := gm.Guilds[guildID]
|
guild, exists := gm.Guilds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
@ -183,8 +233,8 @@ func (gm *GuildMgr) DismissMember(guildID int, operatorAccountId, memberID strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PromoteMember 提升成员为干部
|
// PromoteMember 提升成员为干部
|
||||||
func (gm *GuildMgr) PromoteMember(guildID int, memberID string) error {
|
func (gm *GuildMgr) PromoteMember(guildId int64, memberID string) error {
|
||||||
guild, exists := gm.Guilds[guildID]
|
guild, exists := gm.Guilds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
@ -204,8 +254,8 @@ func (gm *GuildMgr) PromoteMember(guildID int, memberID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DemoteMember 解除成员干部身份
|
// DemoteMember 解除成员干部身份
|
||||||
func (gm *GuildMgr) DemoteMember(guildID int, memberID string) error {
|
func (gm *GuildMgr) DemoteMember(guildId int64, memberID string) error {
|
||||||
guild, exists := gm.Guilds[guildID]
|
guild, exists := gm.Guilds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
@ -225,23 +275,23 @@ func (gm *GuildMgr) DemoteMember(guildID int, memberID string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WriteLog 记录公会日志
|
// WriteLog 记录公会日志
|
||||||
func (gm *GuildMgr) WriteLog(guildID int, accountId string, logType uint16, content string) {
|
func (gm *GuildMgr) WriteLog(guildId int64, accountId string, logType uint16, content string) {
|
||||||
_, exists := gm.Logs[guildID]
|
_, exists := gm.Logs[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
gm.Logs[guildID] = make([]*GuildLog, 0)
|
gm.Logs[guildId] = make([]*GuildLog, 0)
|
||||||
}
|
}
|
||||||
log := &GuildLog{
|
log := &GuildLog{
|
||||||
GuildId: guildID,
|
GuildId: guildId,
|
||||||
AccountId: accountId,
|
AccountId: accountId,
|
||||||
LogType: logType,
|
LogType: logType,
|
||||||
Content: content,
|
Content: content,
|
||||||
}
|
}
|
||||||
gm.Logs[guildID] = append(gm.Logs[guildID], log)
|
gm.Logs[guildId] = append(gm.Logs[guildId], log)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disband 解散公会
|
// Disband 解散公会
|
||||||
func (gm *GuildMgr) Disband(guildID int, accountId string) error {
|
func (gm *GuildMgr) Disband(guildId int64, accountId string) error {
|
||||||
guild, exists := gm.Guilds[guildID]
|
guild, exists := gm.Guilds[guildId]
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.New("guild not found")
|
return errors.New("guild not found")
|
||||||
}
|
}
|
||||||
@ -253,16 +303,16 @@ func (gm *GuildMgr) Disband(guildID int, accountId string) error {
|
|||||||
guildName := guild.Name
|
guildName := guild.Name
|
||||||
guild.Members = nil
|
guild.Members = nil
|
||||||
|
|
||||||
gm.Guilds[guildID] = nil
|
gm.Guilds[guildId] = nil
|
||||||
gm.PendingAccountIds[guildID] = nil
|
gm.PendingAccountIds[guildId] = nil
|
||||||
gm.Logs[guildID] = nil
|
gm.Logs[guildId] = nil
|
||||||
|
|
||||||
// 确保在删除之前没有其他地方引用了公会对象的指针, 以避免空指针异常
|
// 确保在删除之前没有其他地方引用了公会对象的指针, 以避免空指针异常
|
||||||
delete(gm.Guilds, guildID)
|
delete(gm.Guilds, guildId)
|
||||||
delete(gm.PendingAccountIds, guildID)
|
delete(gm.PendingAccountIds, guildId)
|
||||||
delete(gm.Logs, guildID)
|
delete(gm.Logs, guildId)
|
||||||
|
|
||||||
gm.WriteLog(guildID, accountId, 1, "Guild disbanded: "+guildName)
|
gm.WriteLog(guildId, accountId, 1, "Guild disbanded: "+guildName)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -288,8 +338,8 @@ func (gm *GuildMgr) RandomGuilds() []Guild {
|
|||||||
// shuffle 从count50,返回一个slice []int, 包含10个元素
|
// shuffle 从count50,返回一个slice []int, 包含10个元素
|
||||||
randIndices := rand.Perm(count)[:randomGuildNum]
|
randIndices := rand.Perm(count)[:randomGuildNum]
|
||||||
var results []Guild
|
var results []Guild
|
||||||
for _, idx := range randIndices {
|
for _, randId := range randIndices {
|
||||||
results = append(results, *gm.Guilds[idx])
|
results = append(results, *gm.Guilds[q5.ToInt64(randId)])
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
@ -312,7 +362,7 @@ func (gm *GuildMgr) Info(accountId string) (*Guild, []string, []*GuildLog) {
|
|||||||
pendingAccountIds := make([]string, 10)
|
pendingAccountIds := make([]string, 10)
|
||||||
guildLogs := make([]*GuildLog, 10)
|
guildLogs := make([]*GuildLog, 10)
|
||||||
if guild != nil {
|
if guild != nil {
|
||||||
guildId := guild.ID
|
guildId := guild.GuildId
|
||||||
pendingAccountIds = gm.PendingAccountIds[guildId]
|
pendingAccountIds = gm.PendingAccountIds[guildId]
|
||||||
guildLogs = gm.Logs[guildId]
|
guildLogs = gm.Logs[guildId]
|
||||||
}
|
}
|
||||||
@ -323,3 +373,42 @@ func (gm *GuildMgr) Info(accountId string) (*Guild, []string, []*GuildLog) {
|
|||||||
func containsSubstring(s, substr string) bool {
|
func containsSubstring(s, substr string) bool {
|
||||||
return len(s) >= len(substr) && s[len(s)-len(substr):] == substr
|
return len(s) >= len(substr) && s[len(s)-len(substr):] == substr
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (gm *GuildMgr) loadGuildMemberFromDB() {
|
||||||
|
fields := []string{"guild_id", "account_id", "level"}
|
||||||
|
f5.GetJsStyleDb().Select(
|
||||||
|
FRIEND_DB,
|
||||||
|
"t_guild_members",
|
||||||
|
fields,
|
||||||
|
[][]string{},
|
||||||
|
gm.loadGuildMemberFromDBResult,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gm *GuildMgr) loadGuildMemberFromDBResult(err error, rows *f5.DataSet) {
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("loadGuildFromDBResult err:%v \n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for rows.Next() {
|
||||||
|
var (
|
||||||
|
guildId int64
|
||||||
|
accountId string
|
||||||
|
level int
|
||||||
|
)
|
||||||
|
guildId = q5.ToInt64(*rows.GetByIndex(0))
|
||||||
|
accountId = q5.ToString(*rows.GetByIndex(1))
|
||||||
|
level = int(q5.ToInt32(*rows.GetByIndex(2)))
|
||||||
|
|
||||||
|
guildMember := &GuildMember{
|
||||||
|
AccountId: accountId,
|
||||||
|
Level: level,
|
||||||
|
}
|
||||||
|
if guild, ok := gm.Guilds[guildId]; ok {
|
||||||
|
err := guild.AddMember(guildMember)
|
||||||
|
if err != nil {
|
||||||
|
f5.GetSysLog().Info("Guild:%d member is full\n", guildId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -59,7 +59,7 @@ func (this *PlayerMgr) init() {
|
|||||||
"t_user",
|
"t_user",
|
||||||
[][]string{
|
[][]string{
|
||||||
[]string{"account_id", "100"}},
|
[]string{"account_id", "100"}},
|
||||||
func (err error, row *[]*string) {
|
func(err error, row *f5.DataSet) {
|
||||||
fmt.Println(row)
|
fmt.Println(row)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user