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

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 -1
View File
@@ -9,7 +9,7 @@ const (
//最大头像大小 //最大头像大小
max_photo_size uint32 = 0x400000 //4M max_photo_size uint32 = 0x400000 //4M
//服务器地址 //服务器地址
server_addr string = "mattuy.top:3727" server_addr string = "localhost:3727"
) )
//用户组 //用户组
+1 -1
View File
@@ -32,7 +32,7 @@ func NewSession() *Session {
tcpAddr, _ := net.ResolveTCPAddr("tcp", server_addr) tcpAddr, _ := net.ResolveTCPAddr("tcp", server_addr)
conn, err := net.DialTCP("tcp", nil, tcpAddr) conn, err := net.DialTCP("tcp", nil, tcpAddr)
if err != nil { if err != nil {
PrintError("连接服务器失败") PrintError("连接服务器失败" + err.Error())
return nil return nil
} }
var session = new(Session) var session = new(Session)
+1
View File
@@ -27,6 +27,7 @@ func main() {
} //服务模式 } //服务模式
//交互模式 //交互模式
go server.AcceptLoop(tcpListener) go server.AcceptLoop(tcpListener)
Debug("Server Working")
for { for {
inputReader := bufio.NewReader(os.Stdin) inputReader := bufio.NewReader(os.Stdin)
cmd, _ := inputReader.ReadString('\n') cmd, _ := inputReader.ReadString('\n')
+19 -11
View File
@@ -90,8 +90,12 @@ func (session *Session) ReceiveLoop() {
session.SendPanic("", "Failed to unmarshal head.") session.SendPanic("", "Failed to unmarshal head.")
continue continue
} }
if session.sender == nil && headInfo[keyname_operation] != operation_login { if session.sender == nil && headInfo[keyname_operation] != operation_login && headInfo[keyname_operation] != operation_login_old1 {
session.SendPanic("", "MUST LOGIN") 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 continue
} //抛弃未登录用户的消息 } //抛弃未登录用户的消息
switch headInfo[keyname_operation] { switch headInfo[keyname_operation] {
@@ -155,11 +159,14 @@ func (session *Session) LoginHandler(headInfo map[string]string) {
returnInfo[keyname_operation] = headInfo[keyname_operation] returnInfo[keyname_operation] = headInfo[keyname_operation]
returnInfo[keyname_token] = headInfo[keyname_token] returnInfo[keyname_token] = headInfo[keyname_token]
returnInfo["Error"] = "" returnInfo["Error"] = ""
var user *UserInfo //用户信息
//已经登录
if session.status != session_status_created { if session.status != session_status_created {
user = session.sender
session.SendData(returnInfo, nil) session.SendData(returnInfo, nil)
return } else {
} //登录 //登录
user := Login(headInfo["User"], headInfo["Pwd"]) user = Login(headInfo["User"], headInfo["Pwd"])
if user == nil { if user == nil {
Debug("Bad login: illegal user.") Debug("Bad login: illegal user.")
returnInfo["Error"] = "Illegal User." returnInfo["Error"] = "Illegal User."
@@ -170,6 +177,7 @@ func (session *Session) LoginHandler(headInfo map[string]string) {
session.status = session_status_running session.status = session_status_running
session.Offline(server.sessionMap[session.sender.User], "The account is logged by another client.") session.Offline(server.sessionMap[session.sender.User], "The account is logged by another client.")
server.sessionMap[session.sender.User] = session server.sessionMap[session.sender.User] = session
}
returnInfo["User"] = user.User returnInfo["User"] = user.User
returnInfo["NickName"] = user.NickName returnInfo["NickName"] = user.NickName
returnInfo["Motto"] = user.Motto returnInfo["Motto"] = user.Motto
@@ -180,7 +188,7 @@ func (session *Session) LoginHandler(headInfo map[string]string) {
} else { } else {
photo = GetUserPhoto(session.sender.User) photo = GetUserPhoto(session.sender.User)
} }
returnInfo["Photo"] = string(len(photo)) returnInfo["Photo"] = strconv.Itoa(len(photo))
session.SendData(returnInfo, photo) session.SendData(returnInfo, photo)
//转发用户未读消息 //转发用户未读消息
go session.TransUnreadedMessages(session.sender) 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) { func (session *Session) GetUsersHandler(headInfo map[string]string) {
result := make(map[string]string) result := make(map[string]string)
result[keyname_token] = headInfo[keyname_token] result[keyname_token] = headInfo[keyname_token]
result[keyname_operation] = headInfo[operation_update_userinfo] result[keyname_operation] = headInfo[keyname_operation]
result["Error"] = "" result["Error"] = ""
users := make([]UserInfo, 1) //用户列表 users := make([]UserInfo, 1) //用户列表
//获取特定用户信息 //获取特定用户信息
@@ -284,15 +292,15 @@ func (session *Session) GetUsersHandler(headInfo map[string]string) {
//发送用户数据 //发送用户数据
var photoData []byte //头像数据 var photoData []byte //头像数据
result["Error"] = "" result["Error"] = ""
result["Total"] = string(len(users)) //总用户数 result["Total"] = strconv.Itoa(len(users)) //总用户数
for i, curUser := range users { for i, curUser := range users {
photoData = GetUserPhoto(curUser.User) photoData = GetUserPhoto(curUser.User)
result["Count"] = string(i + 1) //当前用户次序编号 result["Count"] = strconv.Itoa(i + 1) //当前用户次序编号
result["User"] = curUser.User result["User"] = curUser.User
result["NickName"] = curUser.NickName result["NickName"] = curUser.NickName
result["Motto"] = curUser.Motto result["Motto"] = curUser.Motto
result["UGroup"] = curUser.UGroup result["UGroup"] = curUser.UGroup
result["Photo"] = string(len(photoData)) //头像数据长度 result["Photo"] = strconv.Itoa(len(photoData)) //头像数据长度
session.SendData(result, 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_token] = result[keyname_token]
endingResult[keyname_operation] = result[keyname_operation] endingResult[keyname_operation] = result[keyname_operation]
endingResult["Total"] = result["Total"] endingResult["Total"] = result["Total"]
endingResult["Count"] = string(-1) endingResult["Count"] = strconv.Itoa(-1)
endingResult["Error"] = "" endingResult["Error"] = ""
session.SendData(endingResult, nil) session.SendData(endingResult, nil)
} }