github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/game/internal/user_config.go (about)

     1  package internal
     2  
     3  import (
     4  	"common"
     5  	"msg"
     6  	"net/url"
     7  
     8  	"github.com/name5566/leaf/log"
     9  	"gopkg.in/mgo.v2/bson"
    10  )
    11  
    12  func (user *User) setLandlordAndroidVersion(version int) {
    13  	if version <= landlordConfigData.AndroidVersion && user.baseData.userData.Role < roleRoot {
    14  		log.Debug("设置的斗地主安卓版本: %v 无效", version)
    15  		user.WriteMsg(&msg.S2C_SetLandlordConfig{
    16  			Error:          msg.S2C_SetLandlordConfig_VersionInvalid,
    17  			AndroidVersion: version,
    18  		})
    19  		return
    20  	}
    21  	landlordConfigData.AndroidVersion = version
    22  	saveConfigData(landlordConfigData)
    23  	user.WriteMsg(&msg.S2C_SetLandlordConfig{
    24  		Error:          msg.S2C_SetLandlordConfig_OK,
    25  		AndroidVersion: version,
    26  	})
    27  	log.Debug("userID %v 设置斗地主安卓新版本为: %v", user.baseData.userData.UserID, version)
    28  }
    29  
    30  func (user *User) setLandlordIOSVersion(version int) {
    31  	if version <= landlordConfigData.IOSVersion && user.baseData.userData.Role < roleRoot {
    32  		log.Debug("设置的斗地主iOS版本: %v 无效", version)
    33  		user.WriteMsg(&msg.S2C_SetLandlordConfig{
    34  			Error:      msg.S2C_SetLandlordConfig_VersionInvalid,
    35  			IOSVersion: version,
    36  		})
    37  		return
    38  	}
    39  	landlordConfigData.IOSVersion = version
    40  	saveConfigData(landlordConfigData)
    41  	user.WriteMsg(&msg.S2C_SetLandlordConfig{
    42  		Error:      msg.S2C_SetLandlordConfig_OK,
    43  		IOSVersion: version,
    44  	})
    45  	log.Debug("userID %v 设置斗地主iOS新版本为: %v", user.baseData.userData.UserID, version)
    46  }
    47  
    48  func (user *User) setLandlordAndroidDownloadUrl(downloadUrl string) {
    49  	surl, err := url.Parse(downloadUrl)
    50  	if err == nil && surl.Scheme == "" || err != nil || downloadUrl == landlordConfigData.AndroidDownloadUrl {
    51  		log.Debug("设置的斗地主安卓下载地址: %v 无效", downloadUrl)
    52  		user.WriteMsg(&msg.S2C_SetLandlordConfig{
    53  			Error:              msg.S2C_SetLandlordConfig_DownloadUrlInvalid,
    54  			AndroidDownloadUrl: downloadUrl,
    55  		})
    56  		return
    57  	}
    58  	landlordConfigData.AndroidDownloadUrl = downloadUrl
    59  	saveConfigData(landlordConfigData)
    60  	user.WriteMsg(&msg.S2C_SetLandlordConfig{
    61  		Error:              msg.S2C_SetLandlordConfig_OK,
    62  		AndroidDownloadUrl: downloadUrl,
    63  	})
    64  	log.Debug("userID %v 设置斗地主安卓下载地址为: %v", user.baseData.userData.UserID, downloadUrl)
    65  }
    66  
    67  func (user *User) setLandlordIOSDownloadUrl(downloadUrl string) {
    68  	surl, err := url.Parse(downloadUrl)
    69  	if err == nil && surl.Scheme == "" || err != nil || downloadUrl == landlordConfigData.IOSDownloadUrl {
    70  		log.Debug("设置的斗地主iOS下载地址: %v 无效", downloadUrl)
    71  		user.WriteMsg(&msg.S2C_SetLandlordConfig{
    72  			Error:          msg.S2C_SetLandlordConfig_DownloadUrlInvalid,
    73  			IOSDownloadUrl: downloadUrl,
    74  		})
    75  		return
    76  	}
    77  	landlordConfigData.IOSDownloadUrl = downloadUrl
    78  	saveConfigData(landlordConfigData)
    79  	user.WriteMsg(&msg.S2C_SetLandlordConfig{
    80  		Error:          msg.S2C_SetLandlordConfig_OK,
    81  		IOSDownloadUrl: downloadUrl,
    82  	})
    83  	log.Debug("userID %v 设置斗地主iOS下载地址为: %v", user.baseData.userData.UserID, downloadUrl)
    84  }
    85  
    86  func (user *User) setLandlordNotice(notice string) {
    87  	landlordConfigData.Notice = notice
    88  	saveConfigData(landlordConfigData)
    89  	user.WriteMsg(&msg.S2C_SetLandlordConfig{
    90  		Error:  msg.S2C_SetLandlordConfig_OK,
    91  		Notice: notice,
    92  	})
    93  	broadcastAll(&msg.S2C_UpdateNotice{Notice: notice})
    94  	log.Debug("userID %v 设置斗地主公告成功", user.baseData.userData.UserID)
    95  }
    96  
    97  func (user *User) setLandlordRadio(radio string) {
    98  	landlordConfigData.Radio = radio
    99  	saveConfigData(landlordConfigData)
   100  	user.WriteMsg(&msg.S2C_SetLandlordConfig{
   101  		Error: msg.S2C_SetLandlordConfig_OK,
   102  		Radio: radio,
   103  	})
   104  	broadcastAll(&msg.S2C_UpdateRadio{Radio: radio})
   105  	log.Debug("userID %v 设置斗地主广播成功", user.baseData.userData.UserID)
   106  }
   107  
   108  func (user *User) setLandlordWeChatNumber(wechatNumber string) {
   109  	if wechatNumber == landlordConfigData.WeChatNumber {
   110  		log.Debug("设置的斗地主客服微信号: %v 无效", wechatNumber)
   111  		user.WriteMsg(&msg.S2C_SetLandlordConfig{
   112  			Error:        msg.S2C_SetLandlordConfig_WeChatNumberInvalid,
   113  			WeChatNumber: wechatNumber,
   114  		})
   115  		return
   116  	}
   117  	landlordConfigData.WeChatNumber = wechatNumber
   118  	saveConfigData(landlordConfigData)
   119  	user.WriteMsg(&msg.S2C_SetLandlordConfig{
   120  		Error:        msg.S2C_SetLandlordConfig_OK,
   121  		WeChatNumber: wechatNumber,
   122  	})
   123  	log.Debug("userID %v 设置斗地主客服微信号为: %v", user.baseData.userData.UserID, wechatNumber)
   124  }
   125  
   126  func (user *User) setUsernamePassword(username string, password string) {
   127  	userData := new(UserData)
   128  	skeleton.Go(func() {
   129  		db := mongoDB.Ref()
   130  		defer mongoDB.UnRef(db)
   131  		// load
   132  		db.DB(DB).C("users").
   133  			Find(bson.M{"username": username}).One(userData)
   134  	}, func() {
   135  		if user.state == userLogout {
   136  			return
   137  		}
   138  		switch userData.UserID {
   139  		case 0:
   140  			user.baseData.userData.Username = username
   141  			user.baseData.userData.Password = password
   142  			updateUserData(user.baseData.userData.UserID, bson.M{"$set": bson.M{"username": username, "password": password}})
   143  			log.Debug("userID %v 设置用户名: %v, 密码: %v", user.baseData.userData.UserID, username, password)
   144  			return
   145  		case user.baseData.userData.UserID:
   146  			if user.baseData.userData.Password == password {
   147  				log.Debug("userID %v 新、旧密码不能相同", user.baseData.userData.UserID)
   148  				return
   149  			}
   150  			user.baseData.userData.Password = password
   151  			updateUserData(user.baseData.userData.UserID, bson.M{"$set": bson.M{"password": password}})
   152  			log.Debug("userID %v 修改密码为: %v", user.baseData.userData.UserID, password)
   153  			return
   154  		}
   155  		log.Debug("用户名: %v 已占用", username)
   156  	})
   157  }
   158  
   159  func toRoleString(role int) string {
   160  	switch role {
   161  	case roleRoot:
   162  		return "超管"
   163  	case roleAdmin:
   164  		return "管理员"
   165  	case roleAgent:
   166  		return "代理"
   167  	case rolePlayer:
   168  		return "玩家"
   169  	case roleBlack:
   170  		return "拉黑"
   171  	case roleRobot:
   172  		return "机器人"
   173  	}
   174  	return ""
   175  }
   176  
   177  func (user *User) setRole(accountID int, role int) {
   178  	if accountID == 0 {
   179  		log.Debug("账户ID为0")
   180  		user.WriteMsg(&msg.S2C_SetUserRole{Error: msg.S2C_SetUserRole_AccountIDInvalid})
   181  		return
   182  	}
   183  	if user.baseData.userData.AccountID == accountID {
   184  		log.Debug("不能设置自己")
   185  		user.WriteMsg(&msg.S2C_SetUserRole{Error: msg.S2C_SetUserRole_NotYourself})
   186  		return
   187  	}
   188  	if common.Index([]int{roleRobot, roleBlack, rolePlayer, roleAdmin, roleRoot}, role) == -1 {
   189  		log.Debug("角色 %v 无效", role)
   190  		user.WriteMsg(&msg.S2C_SetUserRole{
   191  			Error: msg.S2C_SetUserRole_RoleInvalid,
   192  			Role:  role,
   193  		})
   194  		return
   195  	}
   196  	if user.baseData.userData.Role < role {
   197  		log.Debug("userID: %v 没有权限", user.baseData.userData.UserID)
   198  		user.WriteMsg(&msg.S2C_SetUserRole{
   199  			Error: msg.S2C_SetUserRole_PermissionDenied,
   200  			Role:  role,
   201  		})
   202  		return
   203  	}
   204  	otherUserData := new(UserData)
   205  	skeleton.Go(func() {
   206  		db := mongoDB.Ref()
   207  		defer mongoDB.UnRef(db)
   208  
   209  		db.DB(DB).C("users").Find(bson.M{"accountid": accountID}).One(otherUserData)
   210  	}, func() {
   211  		if otherUserData.UserID == 0 {
   212  			log.Debug("账户ID: %v 的用户不存在", accountID)
   213  			user.WriteMsg(&msg.S2C_SetUserRole{
   214  				Error: msg.S2C_SetUserRole_AccountIDInvalid,
   215  			})
   216  			return
   217  		}
   218  		if otherUser, ok := userIDUsers[otherUserData.UserID]; ok {
   219  			if otherUser.baseData.userData.Role == role {
   220  				log.Debug("账户ID: %v 已经是: %v", accountID, toRoleString(role))
   221  				user.WriteMsg(&msg.S2C_SetUserRole{
   222  					Error: msg.S2C_SetUserRole_SetRepeated,
   223  					Role:  role,
   224  				})
   225  				return
   226  			}
   227  			if user.baseData.userData.Role > otherUser.baseData.userData.Role {
   228  				otherUser.baseData.userData.Role = role
   229  				user.WriteMsg(&msg.S2C_SetUserRole{
   230  					Error: msg.S2C_SetUserRole_OK,
   231  					Role:  role,
   232  				})
   233  				log.Debug("userID %v 设置账号ID: %v为 %v", user.baseData.userData.UserID, accountID, toRoleString(role))
   234  				if otherUser.baseData.userData.Role == roleBlack {
   235  					otherUser.Close()
   236  				}
   237  				return
   238  			}
   239  		} else {
   240  			if otherUserData.Role == role {
   241  				log.Debug("账户ID: %v 已经是: %v", accountID, toRoleString(role))
   242  				user.WriteMsg(&msg.S2C_SetUserRole{
   243  					Error: msg.S2C_SetUserRole_SetRepeated,
   244  					Role:  role,
   245  				})
   246  				return
   247  			}
   248  			if user.baseData.userData.Role > otherUserData.Role {
   249  				otherUserData.Role = role
   250  				updateUserData(otherUserData.UserID, bson.M{"$set": bson.M{"role": otherUserData.Role}})
   251  				user.WriteMsg(&msg.S2C_SetUserRole{
   252  					Error: msg.S2C_SetUserRole_OK,
   253  					Role:  role,
   254  				})
   255  				log.Debug("userID %v 设置账号ID: %v为 %v", user.baseData.userData.UserID, accountID, toRoleString(role))
   256  				return
   257  			}
   258  		}
   259  		log.Debug("userID: %v 权限不够", user.baseData.userData.UserID)
   260  		user.WriteMsg(&msg.S2C_SetUserRole{Error: msg.S2C_SetUserRole_PermissionDenied})
   261  	})
   262  }