コード例 #1
0
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);
}
コード例 #2
0
void JSContextStruct::checkContextDisconnectCallback(JSPresenceStruct* jspres)
{
    if (getIsSuspended() || getIsCleared())
        return;

    if (hasOnDisconnectedCallback)
        jsObjScript->handlePresCallback(cbOnDisconnected,this,jspres);
}
コード例 #3
0
v8::Handle<v8::Value> JSPresenceStruct::resume()
{
    if (! getIsSuspended())
        return JSSuspendable::resume();

    struct_setVelocity(mSuspendedVelocity);
    setOrientationVelFunction(mSuspendedOrientationVelocity);
    return JSSuspendable::resume();
}
コード例 #4
0
//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;
}
コード例 #5
0
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);
}
コード例 #6
0
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();
}
コード例 #7
0
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);
}
コード例 #8
0
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";

}
コード例 #9
0
//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);
}