Add Client and Server types
Remove unnecessary type parameter
Implement 'push' and 'pull'