diff options
| author | Harald Radi <phanto@php.net> | 2002-03-16 16:15:34 +0000 |
|---|---|---|
| committer | Harald Radi <phanto@php.net> | 2002-03-16 16:15:34 +0000 |
| commit | 11a67831d1000617e44e4972a12413d559a65b78 (patch) | |
| tree | 790d9d87fd3c078a92e4a9b1ee983e262905afef /ext/rpc/RPC_HOWTO | |
| parent | 201446c2b52444c00eed00df7900f2f9c7f6922b (diff) | |
| download | php-git-11a67831d1000617e44e4972a12413d559a65b78.tar.gz | |
blah
Diffstat (limited to 'ext/rpc/RPC_HOWTO')
| -rw-r--r-- | ext/rpc/RPC_HOWTO | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/ext/rpc/RPC_HOWTO b/ext/rpc/RPC_HOWTO new file mode 100644 index 0000000000..9b6e92b7c6 --- /dev/null +++ b/ext/rpc/RPC_HOWTO @@ -0,0 +1,97 @@ +what's this ? +============= + +This is an abstraction layer that eases the task of writing rpc +extensions (e.g. java, com, corba, soap, srm, .net, xml-rpc, ..). +it maps the quite complex ZendEngine2 oo api to a few simpler to +handle callback functions declared in the 'rpc_object_handlers' +struct. + +so what happens behind my back ? +================================ + +- the abstraction layer takes care of your underlaying data structure +and passes it to you each time you have to handle an operation. +- it does reference counting and tells you when you have to destruct +your underlaying data structure. +- it registers a class and four functions (xxx_load, xxx_call, xxx_get, +xxx_set) for your rpc layer and checks if the parameters are valid (beside +the ones that are optional for your rpc layer). +- it silently creates proxies for references to members of your rpc +objects. +- it optionally does object pooling for objects that support it (has to +be defined in the constructor) +- it optionally requests hash values for method and property names and +caches them. call / get and set requests will then receive the hash value +instead of the original function- / propertyname. + +how can i make use of it ? +========================== + +take ext/rpc/com/com.c as a starting point. you'll have to set up the following struct: + +typedef struct _rpc_object_handlers { + int (*rpc_hash)(char *name, zend_uint name_len, char **hash, zend_uint *hash_len, int type); + int hash_type; + int (*rpc_ctor)(char *class_name, zend_uint class_name_len, void **data, INTERNAL_FUNCTION_PARAMETERS); + int (*rpc_dtor)(void **data); + int (*rpc_call)(char *method_name, zend_uint method_name_len, void **data, INTERNAL_FUNCTION_PARAMETERS); + int (*rpc_get)(char *property_name, zend_uint property_name_len, zval *return_value, void **data); + int (*rpc_set)(char *property_name, zend_uint property_name_len, zval *value, zval *return_value, void **data); + int (*rpc_compare)(void **data1, void **data2); + int (*rpc_get_classname)(char **class_name, zend_uint *class_name_length, void **data); + int (*rpc_has_property)(char *property_name, zend_uint property_name_length, void **data); + int (*rpc_unset_property)(char *property_name, zend_uint property_name_length, void **data); + int (*rpc_get_properties)(HashTable **properties, void **data); +} rpc_object_handlers; + + +rpc_hash: +the hashing function for method and property names. returns a hash value +for the string passed in 'name'. 'type' is either METHOD or PROPERTY. +if you set 'hash_type' to HASH_AS_INT you can set '*hash' to NULL and pass +the hash value as 'hash_len'. +rpc_hash can be set to NULL if hashing of method and property names is not +appreciated. + +hash_type: +either HASH_AS_INT, HASH_AS_STRING or DONT_HASH + +rpc_ctor: +the constructor + +rpc_dtor: +the destructor + +rpc_call: +the call handler + +rpc_get: +the get handler + +rpc_set: +the set handler + +rpc_compare: +the compare handler. +rpc_compare can be set to NULL then objects will be treated the same if they +belong to the same rpc layer. + +rpc_get_classname: +returns the classname. +rpc_get_classname can be set to NULL then the name of the rpc layer will be +used as classname. + +rpc_has_property: +check if a property exists. +rpc_has_property can be set to NULL then true will be returned for every request. + +rpc_unset_property: +unset a property. +rpc_unset_property can be set to NULL, a 'not supported' warning will then be +issued. + +rpc_get_properties: +returns a HashTable with all the properties. +rpc_get_properties can be set to NULL, then a list of the explicit declared +properties will be returned. |
