/*
 * weinre is available under *either* the terms of the modified BSD license *or* the
 * MIT License (2008). See http://opensource.org/licenses/alphabetical for full text.
 * 
 * Copyright (c) 2010, 2011 IBM Corporation
 */

// messages from the client to the server

module weinre {
    interface WeinreClientCommands {
    
        void registerClient(out string clientId);

        void getTargets(out Object[] targets);
        void getClients(out Object[] clients);
        
        void connectTarget(in string clientId, in string targetId);
        void disconnectTarget(in string clientId);
        
        void getExtensions(out string[] extensions)
        
        void logDebug(   in string message );
        void logInfo(    in string message );
        void logWarning( in string message );
        void logError(   in string message );
    };
}

