in lib/torrent/scheduler/dispatch/dispatcher.go [450:470]
func (d *Dispatcher) dispatch(p *peer, msg *conn.Message) error {
switch msg.Message.Type {
case p2p.Message_ERROR:
d.handleError(p, msg.Message.Error)
case p2p.Message_ANNOUCE_PIECE:
d.handleAnnouncePiece(p, msg.Message.AnnouncePiece)
case p2p.Message_PIECE_REQUEST:
d.handlePieceRequest(p, msg.Message.PieceRequest)
case p2p.Message_PIECE_PAYLOAD:
d.handlePiecePayload(p, msg.Message.PiecePayload, msg.Payload)
case p2p.Message_CANCEL_PIECE:
d.handleCancelPiece(p, msg.Message.CancelPiece)
case p2p.Message_BITFIELD:
d.handleBitfield(p, msg.Message.Bitfield)
case p2p.Message_COMPLETE:
d.handleComplete(p)
default:
return fmt.Errorf("unknown message type: %d", msg.Message.Type)
}
return nil
}