private IJavascriptObject GetMapper(IJavascriptMapper iMapperListener)
        {
            _IJavascriptMapper.Enqueue(iMapperListener);

            if (_Mapper != null)
            {
                return(_Mapper);
            }

            _Mapper = _IWebView.Factory.CreateObject(false);

            _Mapper.Bind("Register", _IWebView, (c, o, e) =>
            {
                if (_PullNextMapper)
                {
                    _Current        = _IJavascriptMapper.Dequeue();
                    _PullNextMapper = false;
                }

                if (_Current == null)
                {
                    return;
                }

                int count = e.Length;
                IJavascriptObject registered = e[0];

                switch (count)
                {
                case 1:
                    _Current.RegisterFirst(registered);
                    break;

                case 3:
                    _Current.RegisterMapping(e[1], e[2].GetStringValue(), registered);
                    break;

                case 4:
                    _Current.RegisterCollectionMapping(e[1], e[2].GetStringValue(), e[3].GetIntValue(), registered);
                    break;
                }
            });

            _Mapper.Bind("End", _IWebView, (c, o, e) =>
            {
                if (_PullNextMapper)
                {
                    _Current = _IJavascriptMapper.Dequeue();
                }

                if (_Current != null)
                {
                    _Current.End(e[0]);
                }
                _Current        = null;
                _PullNextMapper = true;
            });

            return(_Mapper);
        }
        private JSObject GetMapper(IJavascriptMapper iMapperListener)
        {
            _IJavascriptMapper.Enqueue(iMapperListener);
    
            if (_Mapper != null)
                return _Mapper;

            _Mapper = _GlobalBuilder.CreateJSO();

             _Mapper.Bind("Register", false, (o, e) =>
            {
                if (_PullNextMapper)
                { 
                    _Current = _IJavascriptMapper.Dequeue();
                    _PullNextMapper = false;
                }

                if (_Current == null)
                    return;

                int count = e.Arguments.Length;
                JSObject registered = (JSObject)e.Arguments[0];

                switch (count)
                {
                    case 1:
                        _Current.RegisterFirst(registered);
                        break;

                    case 3:
                        _Current.RegisterMapping((JSObject)e.Arguments[1], (string)e.Arguments[2], registered);
                        break;

                    case 4:
                        _Current.RegisterCollectionMapping((JSObject)e.Arguments[1],
                            (string)e.Arguments[2], (int)e.Arguments[3], registered);
                        break;
                }
             });

            _Mapper.Bind("End", false, (o, e) =>
                {
                    if (_PullNextMapper)
                        _Current = _IJavascriptMapper.Dequeue();

                    if (_Current!=null)
                        _Current.End((JSObject)e.Arguments[0]);
                    _Current = null;
                    _PullNextMapper = true;
                });

            return _Mapper;
        }
 public IJavascriptObject Map(IJavascriptObject ihybridobject, IJavascriptMapper ijvm, bool checknullvalue = true)
 {
     return(_IWebView.Evaluate(() =>
     {
         IJavascriptObject res = GetKo().Invoke("MapToObservable", _IWebView, ihybridobject, GetMapper(ijvm), _Listener);
         if (((res == null) || (res.IsUndefined)) && checknullvalue)
         {
             throw ExceptionHelper.NoKo();
         }
         return res;
     }));
 }
        private IJavascriptObject GetMapper(IJavascriptMapper iMapperListener)
        {
            _IJavascriptMapper.Enqueue(iMapperListener);
    
            if (_Mapper != null)
                return _Mapper;

            _Mapper = _IWebView.Factory.CreateObject(false);

            _Mapper.Bind("Register", _IWebView, (c, o, e) =>
            {
                if (_PullNextMapper)
                { 
                    _Current = _IJavascriptMapper.Dequeue();
                    _PullNextMapper = false;
                }

                if (_Current == null)
                    return;

                int count = e.Length;
                IJavascriptObject registered = e[0];

                switch (count)
                {
                    case 1:
                        _Current.RegisterFirst(registered);
                        break;

                    case 3:
                        _Current.RegisterMapping(e[1], e[2].GetStringValue(), registered);
                        break;

                    case 4:
                        _Current.RegisterCollectionMapping(e[1], e[2].GetStringValue(), e[3].GetIntValue(), registered);
                        break;
                }
             });

            _Mapper.Bind("End", _IWebView, (c, o, e) =>
                {
                    if (_PullNextMapper)
                        _Current = _IJavascriptMapper.Dequeue();

                    if (_Current!=null)
                        _Current.End(e[0]);
                    _Current = null;
                    _PullNextMapper = true;
                });

            return _Mapper;
        }
        private CefV8Value GetMapper(IJavascriptMapper iMapperListener)
        {
            _IJavascriptMapper.Enqueue(iMapperListener);
    
            if (_Mapper != null)
                return _Mapper;

            _Mapper = _GlobalBuilder.CreateJSO();

            _Mapper.Bind("Register", _CefV8Context, (c, o, e) =>
            {
                if (_PullNextMapper)
                { 
                    _Current = _IJavascriptMapper.Dequeue();
                    _PullNextMapper = false;
                }

                if (_Current == null)
                    return;

                int count = e.Length;
                CefV8Value registered = e[0];

                switch (count)
                {
                    case 1:
                        _Current.RegisterFirst(registered);
                        break;

                    case 3:
                        _Current.RegisterMapping(e[1], e[2].GetStringValue(), registered);
                        break;

                    case 4:
                        _Current.RegisterCollectionMapping(e[1], e[2].GetStringValue(), e[3].GetIntValue(), registered);
                        break;
                }
             });

            _Mapper.Bind("End", _CefV8Context, (c, o, e) =>
                {
                    if (_PullNextMapper)
                        _Current = _IJavascriptMapper.Dequeue();

                    if (_Current!=null)
                        _Current.End(e[0]);
                    _Current = null;
                    _PullNextMapper = true;
                });

            return _Mapper;
        }
        public JSObject Map(JSValue ihybridobject, IJavascriptMapper ijvm, bool checknullvalue = true)
        {
            JSObject res = GetKo().Invoke("MapToObservable", ihybridobject, GetMapper(ijvm), _Listener);

            if ((res == null) && checknullvalue)
            {
                if (_IWebView.GetLastError() == Error.TimedOut)
                {
                    throw ExceptionHelper.TimeOut();
                }

                throw ExceptionHelper.NoKoExtension();
            }
            return(res);
        }
 public JSObject Map(JSValue ihybridobject, IJavascriptMapper ijvm,bool checknullvalue=true)
 {
     JSObject res = GetKo().Invoke("MapToObservable", ihybridobject, GetMapper(ijvm), _Listener);
     if ((res == null) && checknullvalue)
     { 
         if (_IWebView.GetLastError()==Error.TimedOut)
             throw ExceptionHelper.TimeOut();
         
         throw ExceptionHelper.NoKoExtension();
     }
     return res;
 }
        private JSObject GetMapper(IJavascriptMapper iMapperListener)
        {
            _IJavascriptMapper.Enqueue(iMapperListener);

            if (_Mapper != null)
            {
                return(_Mapper);
            }

            _Mapper = _GlobalBuilder.CreateJSO();

            _Mapper.Bind("Register", false, (o, e) =>
            {
                if (_PullNextMapper)
                {
                    _Current        = _IJavascriptMapper.Dequeue();
                    _PullNextMapper = false;
                }

                if (_Current == null)
                {
                    return;
                }

                int count           = e.Arguments.Length;
                JSObject registered = (JSObject)e.Arguments[0];

                switch (count)
                {
                case 1:
                    _Current.RegisterFirst(registered);
                    break;

                case 3:
                    _Current.RegisterMapping((JSObject)e.Arguments[1], (string)e.Arguments[2], registered);
                    break;

                case 4:
                    _Current.RegisterCollectionMapping((JSObject)e.Arguments[1],
                                                       (string)e.Arguments[2], (int)e.Arguments[3], registered);
                    break;
                }
            });

            _Mapper.Bind("End", false, (o, e) =>
            {
                if (_PullNextMapper)
                {
                    _Current = _IJavascriptMapper.Dequeue();
                }

                if (_Current != null)
                {
                    _Current.End((JSObject)e.Arguments[0]);
                }
                _Current        = null;
                _PullNextMapper = true;
            });

            return(_Mapper);
        }
        public IJavascriptObject Map(IJavascriptObject ihybridobject, IJavascriptMapper ijvm, bool checknullvalue = true)
        {
            return _IWebView.Evaluate(() =>
                {

                    IJavascriptObject res = GetKo().Invoke("MapToObservable", _IWebView, ihybridobject, GetMapper(ijvm), _Listener);
                    if (( (res == null) || (res.IsUndefined)) && checknullvalue)
                    {
                        throw ExceptionHelper.NoKo();
                    }
                    return res;
                });
        }
        public CefV8Value Map(CefV8Value ihybridobject, IJavascriptMapper ijvm, bool checknullvalue = true)
        {
            return _CefV8Context.Evaluate(() =>
                {

                    CefV8Value res = GetKo().Invoke("MapToObservable", _CefV8Context,ihybridobject, GetMapper(ijvm), _Listener);
                    if ((res == null) && checknullvalue)
                    {
                        throw ExceptionHelper.NoKo();
                    }
                    return res;
                });
        }