• Jump To … +
    ella.h ella_jni_value.h ella_jvm.h ella_objects.cpp ella_objects.h ella_types.h ella_utils.h
  • ella_jvm.h

  • ¶

    ella_jvm.h nanProject

    Created by Cesar Valdez on 21/04/2016. Copyright © 2016 Cesar Valdez. All rights reserved.

    #ifndef ella_jvm_hpp
    #define ella_jvm_hpp
    
    #include "nan.h"
    #include "jvm_handler.h"
    #include "values.h"
    #include "ella_utils.h"
    
    
    namespace  ella {
  • ¶

    This is the class that defines an Asynchronous Worker, for now works in queue.

        template <typename Fn>
        class JVM : public Nan::AsyncWorker {
        public:
            JVM(Nan::Callback* callback, JVMLoader& _vm, Fn& _fn ):
            AsyncWorker(callback),
            vm(_vm),
            fn(_fn) {};
  • ¶

    this method is called by the Nan::AsyncQueue. this spawn a new thread so calling v8 from here is a SEGENV.

            void Execute(){
                try{
                    if(!vm.isVMReady()) //only one vm for now.
                        vm.Start();
                    
                }catch(VMError& _error){
                    error = _error;
                }
            };
  • ¶

    everything is fine the this method get called.

            void HandleOKCallback () {
                auto object = Nan::New<v8::Object>();
                object->Set(Nan::New("New").ToLocalChecked(),
                            Nan::New<v8::FunctionTemplate>(fn)->GetFunction() );
                
                v8::Local<v8::Value> argv[] = {
                    object
                };
                
                callback->Call(1, argv);
            };
            
            
            void HandleErrorCallback() {
                Nan::ThrowTypeError(Nan::New(error.errorMessage).ToLocalChecked());
            }
            
        private:
            JVMLoader &vm;
            Fn& fn;
            VMError error;
        };
        
        
    }
    
    #endif /* ella_jvm_hpp */