1 user.go
// 用户处理消息的业务
func (this *User) DoMessage(msg string) {
if msg == "who" {
// 查询当前在线用户
this.server.mapLock.Lock()
for userName, _ := range this.server.OnlineMap {
this.SendMsg(userName + "在线\n")
}
this.server.mapLock.Unlock()
} else if len(msg) > 7 && msg[:7] == "rename|" {
// 更改自己的用户名, 消息格式: rename|张三
newName := strings.Split(msg, "|")[1]
// 判断name是否存在
_, err := this.server.OnlineMap[newName]
if err {
this.SendMsg("失败, 该用户名已被其它人使用\n")
} else {
this.server.mapLock.Lock()
delete(this.server.OnlineMap, this.Name)
this.server.OnlineMap[newName] = this
this.server.mapLock.Unlock()
this.Name = newName
this.SendMsg("您已成功更新为用户名:" + this.Name + "\n")
}
} else if len(msg) > 4 && msg[:3] == "to|" {
// 私聊, 消息格式: to|用户名|消息内容
arr := strings.Split(msg, "|")
// 获取对方的用户名
remoteName := arr[1]
if remoteName == "" {
this.SendMsg("消息格式不正确, to|用户名|消息内容")
return
}
// 根据用户名, 获取对方的User对象
remoteUser, ok := this.server.OnlineMap[remoteName]
if !ok {
this.SendMsg("该用户名不存在")
return
}
// 获取消息内容
content := arr[2]
if content == "" {
this.SendMsg("无消息内容, 请重发")
return
}
remoteUser.SendMsg(this.Name + ":" + content)
} else {
this.server.BroadCast(this, msg)
}
}