[修复]重复登录时返回数据异常

This commit is contained in:
2018-12-20 16:58:21 +08:00
parent f8e4af399a
commit 2ec9e9f763
4 changed files with 31 additions and 22 deletions
+1
View File
@@ -27,6 +27,7 @@ func main() {
} //服务模式
//交互模式
go server.AcceptLoop(tcpListener)
Debug("Server Working")
for {
inputReader := bufio.NewReader(os.Stdin)
cmd, _ := inputReader.ReadString('\n')
+28 -20
View File
@@ -90,8 +90,12 @@ func (session *Session) ReceiveLoop() {
session.SendPanic("", "Failed to unmarshal head.")
continue
}
if session.sender == nil && headInfo[keyname_operation] != operation_login {
session.SendPanic("", "MUST LOGIN")
if session.sender == nil && headInfo[keyname_operation] != operation_login && headInfo[keyname_operation] != operation_login_old1 {
returnHead := make(map[string]string)
returnHead[keyname_token] = headInfo[keyname_token]
returnHead[keyname_operation] = headInfo[keyname_operation]
returnHead["Error"] = "Permission failed. Please sign in."
session.SendData(returnHead, nil)
continue
} //抛弃未登录用户的消息
switch headInfo[keyname_operation] {
@@ -155,21 +159,25 @@ func (session *Session) LoginHandler(headInfo map[string]string) {
returnInfo[keyname_operation] = headInfo[keyname_operation]
returnInfo[keyname_token] = headInfo[keyname_token]
returnInfo["Error"] = ""
var user *UserInfo //用户信息
//已经登录
if session.status != session_status_created {
user = session.sender
session.SendData(returnInfo, nil)
return
} //登录
user := Login(headInfo["User"], headInfo["Pwd"])
if user == nil {
Debug("Bad login: illegal user.")
returnInfo["Error"] = "Illegal User."
session.SendData(returnInfo, nil)
return
} else {
//登录
user = Login(headInfo["User"], headInfo["Pwd"])
if user == nil {
Debug("Bad login: illegal user.")
returnInfo["Error"] = "Illegal User."
session.SendData(returnInfo, nil)
return
}
session.sender = user
session.status = session_status_running
session.Offline(server.sessionMap[session.sender.User], "The account is logged by another client.")
server.sessionMap[session.sender.User] = session
}
session.sender = user
session.status = session_status_running
session.Offline(server.sessionMap[session.sender.User], "The account is logged by another client.")
server.sessionMap[session.sender.User] = session
returnInfo["User"] = user.User
returnInfo["NickName"] = user.NickName
returnInfo["Motto"] = user.Motto
@@ -180,7 +188,7 @@ func (session *Session) LoginHandler(headInfo map[string]string) {
} else {
photo = GetUserPhoto(session.sender.User)
}
returnInfo["Photo"] = string(len(photo))
returnInfo["Photo"] = strconv.Itoa(len(photo))
session.SendData(returnInfo, photo)
//转发用户未读消息
go session.TransUnreadedMessages(session.sender)
@@ -264,7 +272,7 @@ func (session *Session) UpdateUserInfoHandler(headInfo map[string]string, data [
func (session *Session) GetUsersHandler(headInfo map[string]string) {
result := make(map[string]string)
result[keyname_token] = headInfo[keyname_token]
result[keyname_operation] = headInfo[operation_update_userinfo]
result[keyname_operation] = headInfo[keyname_operation]
result["Error"] = ""
users := make([]UserInfo, 1) //用户列表
//获取特定用户信息
@@ -284,15 +292,15 @@ func (session *Session) GetUsersHandler(headInfo map[string]string) {
//发送用户数据
var photoData []byte //头像数据
result["Error"] = ""
result["Total"] = string(len(users)) //总用户数
result["Total"] = strconv.Itoa(len(users)) //总用户数
for i, curUser := range users {
photoData = GetUserPhoto(curUser.User)
result["Count"] = string(i + 1) //当前用户次序编号
result["Count"] = strconv.Itoa(i + 1) //当前用户次序编号
result["User"] = curUser.User
result["NickName"] = curUser.NickName
result["Motto"] = curUser.Motto
result["UGroup"] = curUser.UGroup
result["Photo"] = string(len(photoData)) //头像数据长度
result["Photo"] = strconv.Itoa(len(photoData)) //头像数据长度
session.SendData(result, photoData)
}
//发送用户列表结束封包
@@ -300,7 +308,7 @@ func (session *Session) GetUsersHandler(headInfo map[string]string) {
endingResult[keyname_token] = result[keyname_token]
endingResult[keyname_operation] = result[keyname_operation]
endingResult["Total"] = result["Total"]
endingResult["Count"] = string(-1)
endingResult["Count"] = strconv.Itoa(-1)
endingResult["Error"] = ""
session.SendData(endingResult, nil)
}