diff --git a/bilibili/aceld/IM-System/user.go b/bilibili/aceld/IM-System/user.go index 390616c..fa5f45e 100644 --- a/bilibili/aceld/IM-System/user.go +++ b/bilibili/aceld/IM-System/user.go @@ -3,6 +3,7 @@ package main import ( "fmt" "net" + "strings" ) type User struct { @@ -54,9 +55,8 @@ func (user *User) SendMsg(msg string) { // User类的成员方法:处理用户消息 func (user *User) DoMessage(msg string) { - // 约定查询在线用户指令who if msg == "who" { - // 查询当前在线用户列表 + // 约定查询在线用户指令who user.server.mapLock.Lock() for _, onlineuser := range user.server.OnlineMap { onlineMsg := fmt.Sprintf("[%s]%s:在线\n", onlineuser.Addr, onlineuser.Name) @@ -64,6 +64,24 @@ func (user *User) DoMessage(msg string) { user.SendMsg(onlineMsg) } user.server.mapLock.Unlock() + } else if len(msg) > 7 && msg[:7] == "rename|" { + // 约定rename|xx指令为定义我的用户名指令 + newName := strings.Split(msg, "|")[1] + // 查询newName在当前在线列表中是否已经存在 + _, ok := user.server.OnlineMap[newName] + if ok { + user.SendMsg(fmt.Sprintf("用户名%s已被占用\n", newName)) + } else { + user.server.mapLock.Lock() + delete(user.server.OnlineMap, user.Name) + user.server.OnlineMap[newName] = user + user.server.mapLock.Unlock() + // 向大家广播一下新名字 + user.server.BroadCast(user, fmt.Sprintf("修改了用户名为%s\n", newName)) + user.Name = newName + // 自本人反馈一下改名成功 + user.SendMsg(fmt.Sprintf("你已经修改用户名为%s\n", user.Name)) + } } else { user.server.BroadCast(user, msg) }