func decodeMsg(q []byte) (interface{}, error) {
	r := bytes.NewReader(q)
	// MsgKind
	msgkind, err := r.ReadByte()
	if err != nil {
		return nil, err
	}
	msgKind := MsgKind(msgkind)
	// Switch
	switch msgKind {
	case CHUNK:
		msg := &Chunk{}
		// SeqNo
		seqno, err := binary.ReadVarint(r)
		if err != nil {
			return nil, err
		}
		msg.seqno = SeqNo(seqno)
		// Chunk
		msg.chunk, err = ioutil.ReadAll(r)
		if err != nil {
			panic("u")
		}
		return msg, nil

	case SYNC:
		msg := &Sync{}
		nackd, err := binary.ReadVarint(r)
		if err != nil {
			return nil, err
		}
		msg.NAckd = SeqNo(nackd)
		return msg, nil

	case ACK:
		msg := &Ack{}
		nackd, err := binary.ReadVarint(r)
		if err != nil {
			return nil, err
		}
		msg.NAckd = SeqNo(nackd)
		return msg, nil
	}
	return nil, chain.ErrMisbehave
}
// decodeMsg decodes either a *Chunk, *Sync or *Ack object from the byte array.
decodeMsg decodes either a *Chunk, *Sync or *Ack object from the byte array.
// decodeMsg decodes either a * Chunk * Sync or * Ack object from the byte array .
func decodeMsg(q []byte) (interface{}, error) {
	r := bytes.NewReader(q)
	msgkind, err := r.ReadByte()
	if err != nil {
		return nil, err
	}
	msgKind := MsgKind(msgkind)
	switch msgKind {
	case CHUNK:
		msg := &Chunk{}
		seqno, err := binary.ReadVarint(r)
		if err != nil {
			return nil, err
		}
		msg.seqno = SeqNo(seqno)
		msg.chunk, err = ioutil.ReadAll(r)
		if err != nil {
			panic("u")
		}
		return msg, nil
	case SYNC:
		msg := &Sync{}
		nackd, err := binary.ReadVarint(r)
		if err != nil {
			return nil, err
		}
		msg.NAckd = SeqNo(nackd)
		return msg, nil
	case ACK:
		msg := &Ack{}
		nackd, err := binary.ReadVarint(r)
		if err != nil {
			return nil, err
		}
		msg.NAckd = SeqNo(nackd)
		return msg, nil
	}
	return nil, chain.ErrMisbehave
}
func decodeMsg ( q [ ] byte ) ( interface { } , error ) { r := bytes . NewReader ( q ) msgkind , err := r . ReadByte ( ) if err != nil { return nil , err } msgKind := MsgKind ( msgkind ) switch msgKind { case CHUNK : msg := & Chunk { } seqno , err := binary . ReadVarint ( r ) if err != nil { return nil , err } msg . seqno = SeqNo ( seqno ) msg . chunk , err = ioutil . ReadAll ( r ) if err != nil { panic ( " " ) } return msg , nil case SYNC : msg := & Sync { } nackd , err := binary . ReadVarint ( r ) if err != nil { return nil , err } msg . NAckd = SeqNo ( nackd ) return msg , nil case ACK : msg := & Ack { } nackd , err := binary . ReadVarint ( r ) if err != nil { return nil , err } msg . NAckd = SeqNo ( nackd ) return msg , nil } return nil , chain . ErrMisbehave }
decodeMsg decodes either a *Chunk, *Sync or *Ack object from the byte array.
decodeMsg decodes either a * Chunk * Sync or * Ack object from the byte array .
// MsgKind // Switch // SeqNo // Chunk