v8::Handle<v8::Value> JSEventHandlerStruct::getAllData() { v8::HandleScope handle_scope; bool isSusp = getIsSuspended(); bool isClear = getIsCleared(); v8::Local<v8::Object> returner =v8::Object::New(); returner->Set(v8::String::New("isCleared"),v8::Boolean::New(isClear)); returner->Set(v8::String::New("contextId"), v8::Integer::NewFromUnsigned(jscont->getContextID())); if (isClear) return handle_scope.Close(returner); returner->Set(v8::String::New("sender"), sender); returner->Set(v8::String::New("isSuspended"),v8::Boolean::New(isSusp)); v8::Handle<v8::Array> pattArray = v8::Array::New(); for (PatternListSize s =0; s < pattern.size(); ++s) pattArray->Set(v8::Number::New(s), pattern[s].getAllData()); returner->Set(v8::String::New("patterns"), pattArray); returner->Set(v8::String::New("callback"), cb); return handle_scope.Close(returner); }
void JSContextStruct::checkContextDisconnectCallback(JSPresenceStruct* jspres) { if (getIsSuspended() || getIsCleared()) return; if (hasOnDisconnectedCallback) jsObjScript->handlePresCallback(cbOnDisconnected,this,jspres); }
v8::Handle<v8::Value> JSPresenceStruct::resume() { if (! getIsSuspended()) return JSSuspendable::resume(); struct_setVelocity(mSuspendedVelocity); setOrientationVelFunction(mSuspendedOrientationVelocity); return JSSuspendable::resume(); }
//sender should be of type VISIBLE (see template defined in JSObjectScriptManager bool JSEventHandlerStruct::matches(v8::Handle<v8::Object> obj, v8::Handle<v8::Object> incoming_sender, const SpaceObjectReference& receiver) { if (getIsSuspended() || getIsCleared()) return false; //cannot match a suspended handler //decode the sender of the message String errorMessage = "[JS] Error encountered in matches of JSEventHandler. Failed to decode sender of message as a visible object. "; JSPositionListener* jsposlist = decodeJSPosListener(incoming_sender,errorMessage); if (jsposlist == NULL) { JSLOG(error,errorMessage); return false; } SpaceObjectReference* spref1 = jsposlist->getToListenTo(); //decode the expected sender if (! sender->IsNull()) { String errorMessageExpectedSender = "[JS] Error encountered in matches of JSEventHandler. Failed to decode expected sender of event handler. "; JSPositionListener* jsplExpectedSender = decodeJSPosListener(sender, errorMessageExpectedSender); if (jsplExpectedSender == NULL) { JSLOG(error,errorMessageExpectedSender); return false; } SpaceObjectReference* spref2 = jsplExpectedSender->getToListenTo(); //check if the senders match if ( (*spref1) != (*spref2)) //the senders do not match. do not fire return false; } //check if the pattern matches the obj for(PatternList::const_iterator pat_it = pattern.begin(); pat_it != pattern.end(); pat_it++) { if (! pat_it->matches(obj)) return false; } //check if the message is *to* one of my presences if (jscont->canReceiveMessagesFor(receiver)) return true; return false; }
void JSContextStruct::checkContextConnectCallback(JSPresenceStruct* jspres) { addToPresencesArray(jspres); //check whether should evaluate any further callbacks. if (getIsSuspended() || getIsCleared()) return; if (hasOnConnectedCallback) jsObjScript->handlePresCallback(cbOnConnected,this,jspres); }
v8::Handle<v8::Value> JSPresenceStruct::suspend() { if (getIsSuspended()) return getIsSuspendedV8(); mSuspendedVelocity = getVelocity(); mSuspendedOrientationVelocity = getOrientationVelocity(); Vector3f newVel (0,0,0); struct_setVelocity(newVel); Quaternion newOrientVel(0,0,0,1); setOrientationVelFunction(newOrientVel); return JSSuspendable::suspend(); }
v8::Handle<v8::Value> JSPresenceStruct::getAllData() { v8::HandleScope handle_scope; v8::Handle<v8::Object> returner = JSPositionListener::struct_getAllData(); uint32 contID = mContext->getContextID(); returner->Set(v8::String::New("isConnected"), v8::Boolean::New(isConnected)); returner->Set(v8::String::New("contextId"), v8::Integer::NewFromUnsigned(contID)); bool isclear = getIsCleared(); returner->Set(v8::String::New("isCleared"), v8::Boolean::New(isclear)); bool issusp = getIsSuspended(); returner->Set(v8::String::New("isSuspended"), v8::Boolean::New(issusp)); if (!v8::Context::InContext()) return v8::ThrowException(v8::Exception::Error(v8::String::New("Error in get all data of presences truct. not currently in a v8 context."))); v8::Handle<v8::Context>curContext = v8::Context::GetCurrent(); returner->Set(v8::String::New("suspendedOrientationVelocity"),CreateJSResult(curContext,mSuspendedOrientationVelocity)); returner->Set(v8::String::New("suspendedVelocity"),CreateJSResult(curContext,mSuspendedVelocity)); //onConnected if (mOnConnectedCallback.IsEmpty()) returner->Set(v8::String::New("connectCallback"), v8::Null()); else returner -> Set(v8::String::New("connectCallback"), mOnConnectedCallback); //prox removed if (mOnProxRemovedEventHandler.IsEmpty()) returner->Set(v8::String::New("onProxRemovedEventHandler"), v8::Null()); else returner->Set(v8::String::New("onProxRemovedEventHandler"), mOnProxRemovedEventHandler); //prox added func if (mOnProxAddedEventHandler.IsEmpty()) returner->Set(v8::String::New("onProxAddedEventHandler"), v8::Null()); else returner->Set(v8::String::New("onProxAddedEventHandler"), mOnProxAddedEventHandler); return handle_scope.Close(returner); }
void JSEventHandlerStruct::printHandler() { if (getIsCleared()) { std::cout<<"**Cleared. No information."; return; } //print patterns for (PatternList::const_iterator pat_it = pattern.begin(); pat_it != pattern.end(); pat_it++) { if (getIsSuspended()) std::cout<<"**Suspended "; else std::cout<<"**Active "; pat_it->printPattern(); } /* FIXME: sender should really be a part of the pattern. */ //print sender if (this->sender->IsNull()) std::cout<<"Sender: any"; else { //unwrap the sender to match v8::Local<v8::External>wrap; void* ptr; wrap= v8::Local<v8::External>::Cast(this->sender->GetInternalField(0)); ptr = wrap->Value(); ObjectReference* objRef = static_cast<ObjectReference*>(ptr); std::cout<<"Sender: "<<(objRef->getAsUUID()).toString(); } std::cout<<"\n\n"; }
//returning all data necessary to re-generate timer // uint32 contextId // double period // double timeUntil timer expires // bool isSuspended // bool isCleared // func cb v8::Handle<v8::Value> JSTimerStruct::struct_getAllData() { v8::HandleScope handle_scope; uint32 contId = jsContStruct->getContextID(); bool issusp = getIsSuspended(); bool isclear = getIsCleared(); double period = -1; double tUntil = -1; v8::Handle<v8::Function> cbFunc; if (! isclear) { cbFunc = cb; period = timeUntil.toSeconds(); if (issusp) tUntil = timeUntil.toSeconds(); else { Duration pt = mDeadlineTimer->expiresFromNow(); tUntil = pt.seconds(); } } v8::Handle<v8::Object> returner = v8::Object::New(); if (isclear) { returner->Set(v8::String::New("isCleared"),v8::Boolean::New(isclear)); returner->Set(v8::String::New("contextId"), v8::Integer::NewFromUnsigned(contId)); return handle_scope.Close(returner); } returner->Set(v8::String::New("period"), v8::Number::New(period)); returner->Set(v8::String::New("callback"),cbFunc); returner->Set(v8::String::New("timeRemaining"),v8::Number::New(tUntil)); returner->Set(v8::String::New("isSuspended"),v8::Boolean::New(issusp)); return handle_scope.Close(returner); }