]> rtime.felk.cvut.cz Git - frescor/frsh.git/commitdiff
FCB: Added get_resources method
authorMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 10 Feb 2009 08:10:16 +0000 (09:10 +0100)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Tue, 10 Feb 2009 08:10:21 +0000 (09:10 +0100)
This is used by our GUI to view the current FRSH state

fres/cbroker/fcb.c
fres/cbroker/fcb.idl

index 87e4d9072fddb952619f247bf9a63d92fd4b1437..2ffc7745f9103c201ce5d959a49ff2a9bc814e5f 100644 (file)
@@ -480,6 +480,40 @@ err:
        return -1;      
 }
 
+void get_resources(fres_contract_broker obj, fres_resource_seq** resources, CORBA_Environment *ev)
+{
+       struct fcb *fcb = o2fcb(obj);
+       fres_resource_seq *seq;
+       struct resource *res;
+       int n;
+
+       seq = malloc(sizeof(*seq));
+       if (!seq) {
+               ev->major = FORB_EX_NO_MEMORY;
+               return;
+       }
+       memset(seq, 0, sizeof(*seq));
+
+       n=0;
+       gavl_cust_for_each(fcb_resource, fcb, res) {
+               n++;
+       }
+
+       seq->_buffer = CORBA_sequence_fres_resource_allocbuf(n);
+       seq->_maximum = n;
+       seq->_length = n;
+
+       n = 0;
+       gavl_cust_for_each(fcb_resource, fcb, res) {
+               seq->_buffer[n].restype = res->key.type;
+               seq->_buffer[n].resid = res->key.id;
+               seq->_buffer[n].desc.manager = res->mng;
+               n++;
+       }
+
+       *resources = seq;
+}
+
 #ifdef CONFIG_FCB_INET
 static int register_inet_port(forb_orb orb)
 {
@@ -505,6 +539,7 @@ struct forb_fres_contract_broker_impl impl = {
        .cancel_contract = cancel_contract,
        .register_resource = register_resource,
        .register_allocator = register_allocator,
+       .get_resources = get_resources,
 };
 
 int main(int argc, char *argv[])
index 3f4bfbb7dbe8b0384d1b4c7e0a9d2099c90956c6..7d7ad3d613f43e6ce23f1955661951702c130e52 100644 (file)
@@ -69,6 +69,15 @@ module fres {
                /** Manager */
                resource_manager     manager;
        };
+
+       struct resource {
+               frsh_resource_type_t restype;
+               frsh_resource_id_t   resid;
+               resource_desc        desc;
+       };
+       
+       typedef sequence<resource> resource_seq;
+       
        interface contract_broker {
                const string reg_name = "fcb";
                /** 
@@ -124,6 +133,13 @@ module fres {
                 * canceled, non-zero code on error.
                 */
                long cancel_contract(in contract::id_t id);
+
+               /** 
+                * Returns sequence of registered resources.
+                * 
+                * @param[out] resources
+                */
+               void get_resources(out resource_seq resources);
        };
 };