func (nn *NNet) NewRelayBytesMessage(data, srcID, key []byte) (*protobuf.Message, error) {
	id, err := message.GenID(nn.GetLocalNode().MessageIDBytes)
	if err != nil {
		return nil, err
	}
	msgBody := &protobuf.Bytes{
		Data: data,
	}
	buf, err := proto.Marshal(msgBody)
	if err != nil {
		return nil, err
	}
	msg := &protobuf.Message{
		MessageType: protobuf.BYTES,
		RoutingType: protobuf.RELAY,
		MessageId:   id,
		Message:     buf,
		SrcId:       srcID,
		DestId:      key,
	}
	return msg, nil
}
NewRelayBytesMessage creates a BYTES message that send arbitrary bytes to the
remote node that has the smallest distance to a given key
package nnet
import (
	"time"
	"github.com/gogo/protobuf/proto"
	"github.com/nknorg/nnet/message"
	"github.com/nknorg/nnet/node"
	"github.com/nknorg/nnet/protobuf"
)
func (nn *NNet) NewDirectBytesMessage(data []byte) (*protobuf.Message, error) {
	id, err := message.GenID(nn.GetLocalNode().MessageIDBytes)
	if err != nil {
		return nil, err
	}
	msgBody := &protobuf.Bytes{
		Data: data,
	}
	buf, err := proto.Marshal(msgBody)
	if err != nil {
		return nil, err
	}
	msg := &protobuf.Message{
		MessageType: protobuf.BYTES,
		RoutingType: protobuf.DIRECT,
		MessageId:   id,
		Message:     buf,
	}
	return msg, nil
}