code: func (rpcClient *ReconnectRPCClient) Call(serviceMethod string, args interface{}, reply interface{}) error {
  	// Get a new or existing rpc.Client.
  	netRPCClient, err := rpcClient.dial()
  	if err != nil {
  		return err
  	}
  
  	rpcClient.mutex.Lock()
  	if rpcClient.sessionID == "" {
  		loginArgs := NewLoginArgs("admin", "adm1npasswo7d")
  		if err = netRPCClient.Call("LockServer.Login", &loginArgs, &rpcClient.sessionID); err != nil {
  			rpcClient.mutex.Unlock()
  			if err == rpc.ErrShutdown {
  				rpcClient.Close()
  			}
  			return err
  		}
  	}
  	rpcClient.mutex.Unlock()
  
  	err = netRPCClient.Call(serviceMethod, args, reply)
  	if err == rpc.ErrShutdown {
  		netRPCClient.Close()
  	}
  	return err
  }
docs: // Call makes a RPC call to the remote endpoint using the default
  // codec, namely encoding/gob.  It logs in automatically when session ID
  // is empty.