On Fri, 30 Nov 2012 12:03:04 -0200 Gustavo Sverzut Barbieri <barbi...@profusion.mobi> said:
you might actually finally make me happy :) god forbid that ever should happen *grumble* *grumpy* *grrrr* :) > nice... now gimme econnman in JS with easyui :-) > > On Fri, Nov 30, 2012 at 11:30 AM, Enlightenment SVN > <no-re...@enlightenment.org> wrote: > > Log: > > elev8: D-Bus: Implement client side support. > > > > Author: mello > > Date: 2012-11-30 05:30:33 -0800 (Fri, 30 Nov 2012) > > New Revision: 79896 > > Trac: http://trac.enlightenment.org/e/changeset/79896 > > > > Added: > > trunk/PROTO/elev8/data/javascript/dbus-client.js > > trunk/PROTO/elev8/data/javascript/dbus-complex.js > > trunk/PROTO/elev8/src/modules/dbus/Makefile.am Modified: > > trunk/PROTO/elev8/configure.ac trunk/PROTO/elev8/src/modules/Makefile.am > > trunk/PROTO/elev8/src/modules/dbus/dbus-message.cc > > trunk/PROTO/elev8/src/modules/dbus/dbus-message.h > > trunk/PROTO/elev8/src/modules/dbus/dbus-module.h > > trunk/PROTO/elev8/src/modules/dbus/dbus-object.cc > > trunk/PROTO/elev8/src/modules/dbus/dbus-object.h > > trunk/PROTO/elev8/src/modules/dbus/dbus-pending.cc > > trunk/PROTO/elev8/src/modules/dbus/dbus-pending.h > > trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.cc > > trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.h > > trunk/PROTO/elev8/src/modules/dbus/dbus.cc > > > > Modified: trunk/PROTO/elev8/configure.ac > > =================================================================== > > --- trunk/PROTO/elev8/configure.ac 2012-11-30 13:30:28 UTC (rev 79895) > > +++ trunk/PROTO/elev8/configure.ac 2012-11-30 13:30:33 UTC (rev 79896) > > @@ -113,7 +113,7 @@ > > ecore-evas >= 1.0.999 > > ]) > > PKG_CHECK_MODULES([ECORECON], [ecore-con >= 1.0.999]) > > - > > +PKG_CHECK_MODULES([EDBUS], [edbus2]) > > PKG_CHECK_MODULES([EIO], [eio]) > > > > dnl Check for libv8 and v8.h by linking a bit of code using v8 > > @@ -154,6 +154,7 @@ > > src/modules/http/Makefile > > src/modules/elm/Makefile > > src/modules/fs/Makefile > > +src/modules/dbus/Makefile > > data/Makefile > > data/images/Makefile > > data/desktop/Makefile > > > > Modified: trunk/PROTO/elev8/src/modules/Makefile.am > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/Makefile.am 2012-11-30 13:30:28 UTC > > (rev 79895) +++ trunk/PROTO/elev8/src/modules/Makefile.am 2012-11-30 > > 13:30:33 UTC (rev 79896) @@ -1,4 +1,4 @@ > > AUTOMAKE_OPTIONS = 1.4 foreign > > MAINTAINERCLEANFILES = Makefile.in > > > > -SUBDIRS = http elm fs > > +SUBDIRS = http elm fs dbus > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-message.cc > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-message.cc 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-message.cc > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -3,7 +3,7 @@ > > > > namespace dbus { > > > > -static Persistent<FunctionTemplate> DMessage::base_template; > > +Persistent<FunctionTemplate> DMessage::base_template; > > > > DMessage::~DMessage() > > { > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-message.h > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-message.h 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-message.h > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -40,7 +40,7 @@ > > static Handle<Value> NewSignal(const Arguments& args); > > > > EDBus_Message *msg; > > - Persistent<FunctionTemplate> base_template; > > + static Persistent<FunctionTemplate> base_template; > > }; > > > > } > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-module.h > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-module.h 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-module.h > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -14,4 +14,10 @@ > > #define THROW_EXCEPTION(msg) \ > > return ThrowException(Exception::Error(String::New(msg))) > > > > +namespace dbus { > > + > > +extern int _log_domain; > > + > > +} > > + > > #endif > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-object.cc > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-object.cc 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-object.cc > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -1,4 +1,5 @@ > > #include "dbus-connection.h" > > +#include "dbus-message.h" > > #include "dbus-object.h" > > #include "dbus-proxy.h" > > > > @@ -69,15 +70,13 @@ > > > > Handle<Value> DObject::Send(const Arguments& args) > > { > > - if (!DMessage::IsMessage(args[0])) > > - THROW_EXCEPTION("Expecting message"); > > - if (!args[1]->IsFunction()) > > - THROW_EXCEPTION("Expecting callback function"); > > + if (!DMessage::IsMessage(args[0])) > > + THROW_EXCEPTION("Expecting message"); > > + if (!args[1]->IsFunction()) > > + THROW_EXCEPTION("Expecting callback function"); > > > > - HandleScope scope; > > - return scope.Close(External::Wrap(new WrappedProxyMessage(self, > > - ObjectWrap::Unwrap<DMessage>(args[0]->ToObject()), > > - args[1], args[2]))); > > + HandleScope scope; > > + return Undefined(); > > } > > > > } > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-object.h > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-object.h 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-object.h > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -21,6 +21,7 @@ > > > > static Persistent<Function> constructor; > > static Handle<Value> New(const Arguments& args); > > + static Handle<Value> Send(const Arguments& args); > > static Handle<Value> GetProxy(const Arguments& args); > > > > EDBus_Object *obj; > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-pending.cc > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-pending.cc 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-pending.cc > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -1,10 +1,11 @@ > > #include "dbus-connection.h" > > +#include "dbus-pending.h" > > #include "dbus-object.h" > > > > namespace dbus { > > > > DPending::DPending(EDBus_Pending *pending_) > > - : pending(pending_)) > > + : pending(pending_) > > { > > } > > > > @@ -13,7 +14,7 @@ > > edbus_pending_cancel(pending); > > } > > > > -void DPending::Init(Handle<Object> target) > > +void DPending::Init(Handle<Object>) > > { > > HandleScope scope; > > > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-pending.h > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-pending.h 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-pending.h > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -1,5 +1,5 @@ > > -#ifndef DBUS_CONNECTION_H > > -#define DBUS_CONNECTION_H > > +#ifndef DBUS_PENDING_H > > +#define DBUS_PENDING_H > > > > #include "dbus-module.h" > > > > @@ -7,15 +7,16 @@ > > > > namespace dbus { > > > > -class DConnection : public ObjectWrap { > > +class DPending : public ObjectWrap { > > + EDBus_Pending *pending; > > public: > > static void Init(Handle<Object> target); > > > > EDBus_Connection *GetConnection() { return conn; } > > > > private: > > - DConnection(EDBus_Connection_Type type); > > - ~DConnection(); > > + DPending(EDBus_Pending *pending_); > > + ~DPending(); > > > > static Handle<Value> New(const Arguments& args); > > static Handle<Value> GetObject(const Arguments& args); > > @@ -25,4 +26,4 @@ > > > > } > > > > -#endif > > \ No newline at end of file > > +#endif > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.cc > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.cc 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.cc > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -1,4 +1,6 @@ > > #include "dbus-connection.h" > > +#include "dbus-message.h" > > +#include "dbus-pending.h" > > #include "dbus-object.h" > > #include "dbus-proxy.h" > > > > @@ -6,14 +8,19 @@ > > > > Persistent<Function> DProxy::constructor; > > > > -DProxy::DProxy(DObject *obj, const char *iface) > > - : proxy(edbus_proxy_get(obj->GetObject(), iface)) > > +static Handle<Value> einaValueToValue(Eina_Value *value); > > + > > +DProxy::DProxy(DObject *_obj, const char *_iface) > > + : proxy(edbus_proxy_get(_obj->GetObject(), _iface)) > > { > > + obj = _obj; > > + iface = strdup(_iface); > > } > > > > DProxy::~DProxy() > > { > > edbus_proxy_unref(proxy); > > + free(iface); > > } > > > > void DProxy::Init(Handle<Object>) > > @@ -30,8 +37,6 @@ > > FunctionTemplate::New(RemoveSignalHandler)->GetFunction()); > > tpl->PrototypeTemplate()->Set(String::NewSymbol("call"), > > FunctionTemplate::New(Call)->GetFunction()); > > - tpl->PrototypeTemplate()->Set(String::NewSymbol("send"), > > - FunctionTemplate::New(Send)->GetFunction()); > > > > constructor = Persistent<Function>::New(tpl->GetFunction()); > > } > > @@ -63,11 +68,47 @@ > > return scope.Close(constructor->NewInstance(argc, argv)); > > } > > > > -struct WrappedSignalHandler { > > +struct WrappedMessage { > > + static void Call(Handle<Function> callback, const EDBus_Message *msg); > > +}; > > + > > +void WrappedMessage::Call(Handle<Function> callback, const EDBus_Message > > *msg) +{ > > + unsigned int argc = 0; > > + Eina_Value *ev = NULL; > > + Eina_Value_Struct st; > > + const char *errname, *errmsg; > > + > > + if (edbus_message_error_get(msg, &errname, &errmsg)) > > + { > > + fprintf(stderr, "Error: %s %s\n", errname, errmsg); > > + return; > > + } > > + > > + if (strlen(edbus_message_signature_get(msg)) > 0) > > + { > > + ev = edbus_message_to_eina_value(msg); > > + eina_value_pget(ev, &st); > > + argc = st.desc->member_count; > > + } > > + > > + Handle<Value> argv[argc]; > > + > > + for (unsigned int i = 0; i < argc; i++) > > + { > > + Eina_Value value; > > + eina_value_struct_value_get(ev, st.desc->members[i].name, &value); > > + argv[i] = einaValueToValue(&value); > > + } > > + > > + callback->Call(Context::GetCurrent()->Global(), argc, argv); > > +} > > + > > +struct WrappedSignalHandler : WrappedMessage { > > public: > > WrappedSignalHandler(DProxy *proxy_, const char *signal_name_, > > Handle<Value> cb_, Handle<Value> data_) > > - : cb(cb_) > > - , data(data_) > > + : cb(Persistent<Value>::New(cb_)) > > + , data(Persistent<Value>::New(data_)) > > , sh(edbus_proxy_signal_handler_add(proxy_->GetProxy(), > > signal_name_, > > WrappedSignalHandler::Invoke, > > @@ -76,25 +117,115 @@ > > ~WrappedSignalHandler(); > > > > private: > > - Handle<Value> cb; > > - Handle<Value> data; > > + Persistent<Value> cb; > > + Persistent<Value> data; > > EDBus_Signal_Handler *sh; > > > > static void Invoke(void *data, const EDBus_Message *msg); > > }; > > > > -void WrappedSignalHandler::Invoke(void *data, const EDBus_Message *) > > +static Handle<Value> einaValueToValue(Eina_Value *value) > > { > > - HandleScope scope; > > - WrappedSignalHandler *self = static_cast<WrappedSignalHandler *>(data); > > - Handle<Function> callback(Function::Cast(*self->cb)); > > + Handle<Value> val = Undefined(); > > > > - const unsigned argc = 2; > > - /* FIXME: Convert msg to js */ > > - Handle<Value> argv[argc] = { self->data, Undefined() }; > > - callback->Call(Context::GetCurrent()->Global(), argc, argv); > > + const Eina_Value_Type *type = eina_value_type_get(value); > > + > > + if (EINA_VALUE_TYPE_INT == type) > > + { > > + int i; > > + eina_value_get(value, &i); > > + val = Number::New(i); > > + } > > + else if (EINA_VALUE_TYPE_STRING == type) > > + { > > + const char *s; > > + eina_value_get(value, &s); > > + val = String::New(s); > > + } > > + else if (EINA_VALUE_TYPE_UCHAR == type) > > + { > > + unsigned char c; > > + eina_value_get(value, &c); > > + val = Number::New(c); > > + } > > + else if (EINA_VALUE_TYPE_SHORT == type) > > + { > > + short i; > > + eina_value_get(value, &i); > > + val = Number::New(i); > > + } > > + else if (EINA_VALUE_TYPE_USHORT == type) > > + { > > + unsigned short i; > > + eina_value_get(value, &i); > > + val = Number::New(i); > > + } > > + else if (EINA_VALUE_TYPE_UINT == type) > > + { > > + unsigned int i; > > + eina_value_get(value, &i); > > + val = Number::New(i); > > + } > > + else if (EINA_VALUE_TYPE_INT64 == type) > > + { > > + int64_t i; > > + eina_value_get(value, &i); > > + val = Number::New(i); > > + } > > + else if (EINA_VALUE_TYPE_UINT64 == type) > > + { > > + uint64_t i; > > + eina_value_get(value, &i); > > + val = Number::New(i); > > + } > > + else if (EINA_VALUE_TYPE_DOUBLE == type) > > + { > > + double i; > > + eina_value_get(value, &i); > > + val = Number::New(i); > > + } > > + else if (EINA_VALUE_TYPE_ARRAY == type) > > + { > > + unsigned int len = eina_value_array_count(value); > > + val = Array::New(len); > > + for (unsigned int i = 0; i < len; i++) > > + { > > + Eina_Value v; > > + eina_value_array_value_get(value, i, &v); > > + val->ToObject()->Set(i, einaValueToValue(&v)); > > + } > > + } > > + else if (EINA_VALUE_TYPE_STRUCT == type) > > + { > > + Eina_Value_Struct st; > > + eina_value_pget(value, &st); > > + > > + unsigned int len = st.desc->member_count; > > + val = Array::New(len); > > + > > + for (unsigned int i = 0; i < len; i++) > > + { > > + Eina_Value v; > > + eina_value_struct_value_get(value, st.desc->members[i].name, > > &v); > > + val->ToObject()->Set(i, einaValueToValue(&v)); > > + } > > + } > > + else > > + { > > + WRN("Unexpected Type."); > > + } > > + > > + return val; > > } > > > > +void WrappedSignalHandler::Invoke(void *data, const EDBus_Message *msg) > > +{ > > + HandleScope scope; > > + WrappedSignalHandler *self = static_cast<WrappedSignalHandler *>(data); > > + Handle<Function> callback(Function::Cast(*self->cb)); > > + Call(callback, msg); > > +} > > + > > WrappedSignalHandler::~WrappedSignalHandler() > > { > > edbus_signal_handler_unref(sh); > > @@ -119,61 +250,166 @@ > > delete static_cast<WrappedSignalHandler *>(External::Unwrap(args[0])); > > return Undefined(); > > } > > +struct WrappedCallMessage : WrappedMessage { > > +public: > > + WrappedCallMessage(Handle<Value> _callback) > > + : cb(Persistent<Value>::New(_callback)) {} > > + Persistent<Value> cb; > > + static void Callback(void *data, const EDBus_Message *msg, > > EDBus_Pending *pending); +}; > > > > -Handle<Value> DProxy::Call(const Arguments&) > > +void WrappedCallMessage::Callback(void *data, const EDBus_Message *msg, > > EDBus_Pending *) { > > - return Undefined(); > > + HandleScope scope; > > + WrappedCallMessage *self = static_cast<WrappedCallMessage *>(data); > > + Handle<Function> callback(Function::Cast(*self->cb)); > > + Call(callback, msg); > > } > > > > -struct WrappedProxyMessage { > > -public: > > - WrappedProxyMessage(DProxy *proxy_, DMessage *msg_, Handle<Value> cb_, > > Handle<Value> data_) > > - : cb(cb_) > > - , data(data_) > > - , pending(edbus_proxy_send(proxy_->GetProxy(), > > - msg_->GetMessage(), > > - WrappedProxyMessage::Invoke, > > - this, > > - -1)) {} > > +static char getSigID(Handle<Value> val) > > +{ > > + char c = '?'; > > + Local<Value> sig = val->ToObject()->Get(String::NewSymbol("signature")); > > > > - ~WrappedProxyMessage(); > > + if (!sig->IsUndefined()) > > + { > > + c = (*String::Utf8Value(sig))[0]; > > + } > > + else > > + { > > + if (val->IsBoolean()) > > + c = 'b'; > > + else if (val->IsNumber()) > > + c = 'd'; > > + else if (val->IsString()) > > + c = 's'; > > + else if (val->IsArray()) > > + c = 'a'; > > + else > > + WRN("Unexpected type."); > > + } > > > > -private: > > - Handle<Value> cb; > > - Handle<Value> data; > > - EDBus_Pending *pending; > > + return c; > > +} > > > > - static void Invoke(void *data, const EDBus_Message *msg, EDBus_Pending > > *pending); -}; > > +static Local<String> getSignature(Local<String> signature, Handle<Value> > > val) +{ > > + if (val->IsUndefined()) > > + return signature; > > > > -WrappedProxyMessage::~WrappedProxyMessage() > > + const char sig[2] = { getSigID(val), '\0' }; > > + > > + if ('r' == sig[0]) > > + { > > + Local<Object> obj = val->ToObject(); > > + Local<Array> props = obj->GetOwnPropertyNames(); > > + unsigned int len = props->Length(); > > + > > + signature = String::Concat(signature, String::New("(")); > > + for (unsigned int i = 0; i < len; i++) > > + signature = getSignature(signature, obj->Get(props->Get(i))); > > + signature = String::Concat(signature, String::New(")")); > > + } > > + else > > + { > > + signature = String::Concat(signature, String::New(sig)); > > + > > + if (val->IsArray()) > > + { > > + Local<Value> v = val->ToObject()->Get(0); > > + signature = getSignature(signature, v); > > + } > > + } > > + > > + return signature; > > +} > > + > > +static Local<String> getSignature(Handle<Value> val) > > { > > - edbus_pending_unref(pending); > > + return getSignature(String::New(""), val); > > } > > > > -void WrappedProxyMessage::Invoke(void *data, const EDBus_Message *msg, > > EDBus_Pending *) +static void append(EDBus_Message_Iter *iter, > > Handle<Value> val) { > > - HandleScope scope; > > - WrappedProxyMessage *self = static_cast<WrappedProxyMessage *>(data); > > - Handle<Function> callback(Function::Cast(*self->cb)); > > + if (val->IsUndefined()) > > + return; > > > > - const unsigned argc = 2; > > - /* FIXME: Convert msg to js */ > > - Handle<Value> argv[argc] = { self->data, Undefined() }; > > - callback->Call(Context::GetCurrent()->Global(), argc, argv); > > + const char sig = getSigID(val); > > + > > + switch (sig) > > + { > > + default: > > + edbus_message_iter_basic_append(iter, sig, *String::Utf8Value > > (val)); > > + break; > > + case 'b': > > + edbus_message_iter_basic_append(iter, sig, val->BooleanValue()); > > + break; > > + case 'n': > > + case 'i': > > + case 'x': > > + edbus_message_iter_basic_append(iter, sig, val->Int32Value()); > > + break; > > + case 'y': > > + case 'q': > > + case 'u': > > + case 't': > > + edbus_message_iter_basic_append(iter, sig, val->ToUint32()->Value > > ()); > > + break; > > + case 'd': > > + edbus_message_iter_basic_append(iter, sig, val->NumberValue()); > > + break; > > + case 'v': > > + case 'a': > > + { > > + Local<Object> obj = val->ToObject(); > > + Local<Array> props = obj->GetOwnPropertyNames(); > > + EDBus_Message_Iter *sub_iter = > > edbus_message_iter_container_new > > + (iter, sig, &(*String::Utf8Value(getSignature(val)))[1]); > > + > > + for (unsigned int i = 0, len = props->Length(); i < len; i++) > > + append(sub_iter, obj->Get(props->Get(i))); > > + > > + edbus_message_iter_container_close(iter, sub_iter); > > + break; > > + } > > + case 'r': > > + { > > + EDBus_Message_Iter *sub_iter; > > + Local<Object> obj = val->ToObject(); > > + Local<Array> props = obj->GetOwnPropertyNames(); > > + > > + edbus_message_iter_arguments_set > > + (iter, *String::Utf8Value(getSignature(val)), &sub_iter); > > + > > + for (unsigned int i = 0, len = props->Length(); i < len; i++) > > + append(sub_iter, obj->Get(props->Get(i))); > > + > > + edbus_message_iter_container_close(iter, sub_iter); > > + break; > > + } > > + } > > } > > > > -Handle<Value> DProxy::Send(const Arguments& args) > > +Handle<Value> DProxy::Call(const Arguments& args) > > { > > - if (!DMessage::IsMessage(args[0])) > > - THROW_EXCEPTION("Expecting message"); > > - if (!args[1]->IsFunction()) > > - THROW_EXCEPTION("Expecting callback function"); > > + DProxy *self = ObjectWrap::Unwrap<DProxy>(args.This()); > > > > - HandleScope scope; > > - return scope.Close(External::Wrap(new WrappedProxyMessage(self, > > - ObjectWrap::Unwrap<DMessage>(args[0]->ToObject()), > > - args[1], args[2]))); > > + EDBus_Message *msg; > > + EDBus_Message_Iter *iter; > > + > > + msg = edbus_proxy_method_call_new(self->proxy, *String::Utf8Value(args > > [0])); > > + iter = edbus_message_iter_get(msg); > > + > > + unsigned int len = args.Length() - 1; > > + > > + for (unsigned int i = 1; i < len; i++) > > + append(iter, args[i]); > > + > > + edbus_proxy_send(self->proxy, msg, WrappedCallMessage::Callback, > > + new WrappedCallMessage(args[len]), -1); > > + edbus_message_unref(msg); > > + > > + return Undefined(); > > } > > > > } > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.h > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.h 2012-11-30 13:30:28 > > UTC (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus-proxy.h > > 2012-11-30 13:30:33 UTC (rev 79896) @@ -16,7 +16,7 @@ > > EDBus_Proxy *GetProxy() { return proxy; } > > > > private: > > - DProxy(DObject *obj, const char *iface); > > + DProxy(DObject *_obj, const char *_iface); > > ~DProxy(); > > > > static Persistent<Function> constructor; > > @@ -25,9 +25,10 @@ > > static Handle<Value> AddSignalHandler(const Arguments &args); > > static Handle<Value> RemoveSignalHandler(const Arguments &args); > > static Handle<Value> Call(const Arguments &args); > > - static Handle<Value> Send(const Arguments &args); > > > > EDBus_Proxy *proxy; > > + DObject *obj; > > + char *iface; > > }; > > > > } > > > > Modified: trunk/PROTO/elev8/src/modules/dbus/dbus.cc > > =================================================================== > > --- trunk/PROTO/elev8/src/modules/dbus/dbus.cc 2012-11-30 13:30:28 UTC > > (rev 79895) +++ trunk/PROTO/elev8/src/modules/dbus/dbus.cc 2012-11-30 > > 13:30:33 UTC (rev 79896) @@ -18,6 +18,83 @@ > > > > } > > > > +static Handle<Value> sigIt(Handle<Value> val, const char *sig) > > +{ > > + val->ToObject()->Set(String::NewSymbol("signature"), String::New(sig), > > DontEnum); > > + return val; > > +} > > + > > +static Handle<Value> DBoolean(const Arguments& args) > > +{ > > + return args[0]->ToBoolean(); > > +} > > + > > +static Handle<Value> DByte(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->ToUint32()->Value()), "y"); > > +} > > + > > +static Handle<Value> DInt16(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->Int32Value()), "n"); > > +} > > + > > +static Handle<Value> DInt32(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->Int32Value()), "i"); > > +} > > + > > +static Handle<Value> DInt64(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->Int32Value()), "x"); > > +} > > + > > +static Handle<Value> DUint16(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->ToUint32()->Value()), "q"); > > +} > > + > > +static Handle<Value> DUint32(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->ToUint32()->Value()), "u"); > > +} > > + > > +static Handle<Value> DUint64(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->ToUint32()->Value()), "t"); > > +} > > + > > +static Handle<Value> DDouble(const Arguments& args) > > +{ > > + return sigIt(NumberObject::New(args[0]->NumberValue()), "d"); > > +} > > + > > +static Handle<Value> DString(const Arguments& args) > > +{ > > + return sigIt(StringObject::New(args[0]->ToString()), "s"); > > +} > > + > > +static Handle<Value> DArray(const Arguments& args) > > +{ > > + unsigned int len = args.Length(); > > + Handle<Array> array = Array::New(len); > > + for (unsigned int i = 0; i < len; i++) > > + array->Set(i, args[i]); > > + return array; > > +} > > + > > +static Handle<Value> DStruct(const Arguments& args) > > +{ > > + return sigIt(DArray(args), "r"); > > +} > > + > > +static Handle<Value> DVariant(const Arguments& args) > > +{ > > + return sigIt(DArray(args), "v"); > > +} > > + > > +extern "C" void RegisterModule(Handle<Object> target); > > + > > extern "C" > > void RegisterModule(Handle<Object> target) > > { > > @@ -32,6 +109,21 @@ > > ecore_init(); > > edbus_init(); > > > > + target->Set(String::NewSymbol("Boolean"), FunctionTemplate::New > > (DBoolean)->GetFunction()); > > + target->Set(String::NewSymbol("Byte"), FunctionTemplate::New > > (DByte)->GetFunction()); > > + target->Set(String::NewSymbol("Int16"), FunctionTemplate::New > > (DInt16)->GetFunction()); > > + target->Set(String::NewSymbol("Int32"), FunctionTemplate::New > > (DInt32)->GetFunction()); > > + target->Set(String::NewSymbol("Int64"), FunctionTemplate::New > > (DInt64)->GetFunction()); > > + target->Set(String::NewSymbol("UInt16"), FunctionTemplate::New > > (DUint16)->GetFunction()); > > + target->Set(String::NewSymbol("UInt32"), FunctionTemplate::New > > (DUint32)->GetFunction()); > > + target->Set(String::NewSymbol("UInt64"), FunctionTemplate::New > > (DUint64)->GetFunction()); > > + target->Set(String::NewSymbol("Double"), FunctionTemplate::New > > (DDouble)->GetFunction()); > > + target->Set(String::NewSymbol("String"), FunctionTemplate::New > > (DString)->GetFunction()); + > > + target->Set(String::NewSymbol("Array"), FunctionTemplate::New > > (DArray)->GetFunction()); > > + target->Set(String::NewSymbol("Struct"), FunctionTemplate::New > > (DStruct)->GetFunction()); > > + target->Set(String::NewSymbol("Variant"), FunctionTemplate::New > > (DVariant)->GetFunction()); + > > dbus::DConnection::Init(target); > > dbus::DObject::Init(target); > > dbus::DProxy::Init(target); > > > > > > ------------------------------------------------------------------------------ > > Keep yourself connected to Go Parallel: > > TUNE You got it built. Now make it sing. Tune shows you how. > > http://goparallel.sourceforge.net > > _______________________________________________ > > enlightenment-svn mailing list > > enlightenment-...@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > > > -- > Gustavo Sverzut Barbieri > http://profusion.mobi embedded systems > -------------------------------------- > MSN: barbi...@gmail.com > Skype: gsbarbieri > Mobile: +55 (19) 9225-2202 > > ------------------------------------------------------------------------------ > Keep yourself connected to Go Parallel: > TUNE You got it built. Now make it sing. Tune shows you how. > http://goparallel.sourceforge.net > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ Keep yourself connected to Go Parallel: INSIGHTS What's next for parallel hardware, programming and related areas? Interviews and blogs by thought leaders keep you ahead of the curve. http://goparallel.sourceforge.net _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel