added cache to connections. changed the design so that callback is always called, either with or without error. for every message you push into the push_service it's guaranteed the callback will be invoked with either success or failure.