示例#1
0
// 处理客户端逻辑
func handleClient(clientObj *client.Client, loginSucceedCh chan int) {
	for {
		content, ok := clientObj.GetValieMessage()
		if !ok {
			break
		}

		// 处理数据
		// 1、将结果反序列化
		responseMap := make(map[string]interface{})
		err := json.Unmarshal(content, &responseMap)
		if err != nil {
			logUtil.Log(fmt.Sprintf("反序列化%s出错,错误信息为:%s", string(content), err), logUtil.Error, true)
			continue
		}

		// 2、判断Code是否为0
		code_init, ok := responseMap["Code"].(float64)
		if !ok {
			fmt.Println(fmt.Sprintf("Code:%v,不是int类型", responseMap["Code"]))
			continue
		}
		code := int(code_init)
		if code != 0 {
			// 解析Message
			message, ok := responseMap["Message"].(string)
			if !ok {
				fmt.Println(fmt.Sprintf("Message:%v,不是string类型", responseMap["Message"]))
				continue
			}
			fmt.Println("返回结果不正确,错误信息为:", message)
			continue
		}

		// 3、判断CommandType
		commandType_init, ok := responseMap["CommandType"].(float64)
		if !ok {
			fmt.Println(fmt.Sprintf("CommandType:%v,不是int类型", responseMap["CommandType"]))
			continue
		}
		commandType := int(commandType_init)
		switch commandType {
		case 1: //Login
			fmt.Println("登陆成功,可以发送信息")
			loginSucceedCh <- 1
		case 2: //Logout
		case 3: //SendMessage
			// 获取Data
			dataMap, ok := responseMap["Data"].(map[string]interface{})
			if !ok {
				fmt.Println(fmt.Sprintf("Data:%v,不是map[string]interface{}类型", responseMap["Data"]))
				continue
			}

			// 获取Message
			message, ok := dataMap["Message"].(string)
			if !ok {
				fmt.Println(fmt.Sprintf("Message:%v,不是string类型", dataMap["Message"]))
				continue
			}

			// 判断是不是系统消息
			var name string
			var fromMap map[string]interface{}
			if name, ok = dataMap["From"].(string); ok {

			} else if fromMap, ok = dataMap["From"].(map[string]interface{}); ok {
				// 获取发送者名称:
				name, ok = fromMap["Name"].(string)
				if !ok {
					fmt.Println(fmt.Sprintf("Name:%v,不是string类型", fromMap["Name"]))
					continue
				}
			} else {
				fmt.Println(fmt.Sprintf("From:%v,不是map[string]interface{}类型", dataMap["From"]))
				continue
			}

			fmt.Printf("%s说:%s\n", name, message)
		case 4: //UpdatePlayerInfo
		}
	}
}