CPointer<CJSScript> CKadScript::MakeScript(const string& Source, const wstring& Name, uint32 Version) { CPointer<CJSScript> pScript = new CJSScript(this); CDebugScope Debug(this); // this may origined with a operation but is a global event wstring FileName = ToHex(m_CodeID.GetData(), m_CodeID.GetSize()) + L"/" + Name; map<string, CObject*> Objects; Objects["debug"] = new CDebugObj(FileName + L"-v" + GetVersion(Version), LineLogger, this); Objects["kademlia"] = GetParent<CKademlia>(); Objects["script"] = this; if(CBinaryCache* pCache = GetParent<CKademlia>()->Engine()->GetCache()) Objects["cache"] = pCache; wstring wSource; Utf8ToWStr(wSource, Source); pScript->Initialize(wSource, FileName, Objects); // this can fron a CException return pScript; }
int XmppMessageReciveTask::ProcessStart(void) { static buzz::StaticQName QN_DELAY = { "urn:xmpp:delay", "delay" }; // 获取下一个stanza const auto stanza = NextStanza(); if (stanza == nullptr) { return STATE_BLOCKED; } // 获取消息体 const auto body = stanza->FirstNamed(buzz::QN_BODY); if (body == nullptr) { return STATE_BLOCKED; } XmppMessageInfo message; // 消息id message.SetUid(Utf8ToWStr(stanza->Attr(buzz::QN_ID))); // 消息类型 message.SetType(Utf8ToWStr(stanza->Attr(buzz::QN_TYPE))); // 获取发送人 std::wstring from(Utf8ToWStr(stanza->Attr(buzz::QN_FROM))); message.SetFrom(from); message.SetFromResource(from); // 获取接收人 message.SetTo(Utf8ToWStr(stanza->Attr(buzz::QN_TO))); message.SetToResource(Utf8ToWStr(stanza->Attr(buzz::QN_TO))); // 获取消息 message.SetContent(conv.from_bytes(body->BodyText())); // 获取时间 const auto delay = stanza->FirstNamed(QN_DELAY); if (delay != nullptr) { message.SetTime(Utf8ToWStr(delay->Attr(buzz::kQnStamp))); } // 是否离线消息 message.SetIsOfflineMsg(delay != nullptr); // 获取主题 const auto subject = stanza->FirstNamed(buzz::QN_SUBJECT); if (subject != nullptr) { message.SetSubject(Utf8ToWStr(subject->BodyText())); // 主题数据 if (subject->HasAttr(buzz::QN_VALUE)) { message.SetSubjectValue(Utf8ToWStr(subject->Attr(buzz::QN_VALUE))); } } // 获取扩展数据 auto extention = stanza->FirstNamed(QN_EXTENTION); if (extention != nullptr) { std::map<std::wstring, std::wstring> mapValue; auto elChild = extention->FirstElement(); while (elChild != nullptr) { auto name = elChild->Name().LocalPart(); mapValue.emplace(Utf8ToWStr(name), Utf8ToWStr(elChild->BodyText().c_str())); elChild = elChild->NextElement(); } message.SetExtention(mapValue); } MessageReceived(message); return STATE_START; }