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

Reply via email to