func New(url string, cfg *config.Config, credentialProvider *credentials.Credentials, rwTimeout time.Duration) wsclient.ClientServer {
	cs := &clientServer{}
	cs.URL = url
	cs.CredentialProvider = credentialProvider
	cs.AgentConfig = cfg
	cs.ServiceError = &acsError{}
	cs.RequestHandlers = make(map[string]wsclient.RequestHandler)
	cs.TypeDecoder = NewACSDecoder()
	cs.RWTimeout = rwTimeout
	return cs
}
func New(url string, cfg *config.Config, credentialProvider *credentials.Credentials, rwTimeout time.Duration) wsclient.ClientServer {
	cs := &clientServer{}
	cs.URL = url
	cs.CredentialProvider = credentialProvider
	cs.AgentConfig = cfg
	cs.ServiceError = &acsError{}
	cs.RequestHandlers = make(map[string]wsclient.RequestHandler)
	cs.TypeDecoder = NewACSDecoder()
	cs.RWTimeout = rwTimeout
	return cs
}
// New returns a client/server to bidirectionally communicate with ACS
// The returned struct should have both 'Connect' and 'Serve' called upon it
// before being used.