示例#1
0
// recv receives marshaled data from 0mq socket.
func recv(sock *goczmq.Sock, flag int) (t Transit, err error) {
	var frames [][]byte

	if flag == goczmq.FlagDontWait {
		frames, err = sock.RecvMessageNoWait()
	} else {
		frames, err = sock.RecvMessage()
	}

	if err != nil {
		return nil, err
	}

	sType := sock.GetType()
	if err != nil {
		return nil, err
	}

	var routingID []byte
	// If message came from a router socket, first frame is routingID
	if sType == goczmq.Router {
		if len(frames) <= 1 {
			return nil, errors.New("no routingID")
		}
		routingID = frames[0]
		frames = frames[1:]
	}

	t, err = Unmarshal(frames...)
	if err != nil {
		return nil, err
	}

	if sType == goczmq.Router {
		t.SetRoutingID(routingID)
	}
	return t, err
}