Beispiel #1
0
func (co *UserManager) Input(userMap map[string]chan *lm.Data_Message, user *lm.Data_User) {
	defer co.Conn.Close()
	defer delete(userMap, user.GetUser()) //// del
	for {
		size := make([]byte, 4)
		index, err := co.Conn.Read(size)
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		if index > 0 {
			size_ := int32(binary.BigEndian.Uint32(size))
			data := make([]byte, size_)
			dataObj := new(lm.Data)
			co.Conn.Read(data)
			proto.Unmarshal(data, dataObj)
			println("========= receive start %d", *dataObj.Type)
			if *dataObj.Type == int32(lm.Data_MESSAGE) {
				println("========= receive msg")
				msg := dataObj.GetMsg()
				msg.Send = new(string)
				*msg.Send = user.GetUser() //TODO
				println(*msg.Send + "========= receive send")
				accept := userMap[msg.GetAccept()]
				if accept != nil {
					println("========= receive ok", msg.GetAccept())
					userMap[msg.GetAccept()] <- msg
				}
				println(*msg.Send + "========= receive ok")
				co.ResultOK() ////接收信息OK
			}
		}
	}
}