Add on_message_received abstract method
Add on_connect and on_disconnect abstract methods
Rename on_message_received to be consistent
Split the client api and the demo client