some work on AbstractClient, ProtocolProvider and Protocol Structure