When a transaction message is processed, it will call init(), then it will call your apply() function, passing in the code and action. It is your contracts job to route the call from there using code and action and to know what type to cast the current message (current_message<TOKEN_NAME::transfer:angry:) ).
Follow me for more updates on bitcoin and other interesting crypto info.
@onlytimeknow