/push/:msgtoken sendet Push
This commit is contained in:
43
express-server/node_modules/fsevents/src/async.cc
generated
vendored
Normal file
43
express-server/node_modules/fsevents/src/async.cc
generated
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
** © 2014 by Philipp Dunkel <pip@pipobscure.com>
|
||||
** Licensed under MIT License.
|
||||
*/
|
||||
|
||||
|
||||
void async_propagate(uv_async_t *async) {
|
||||
if (!async->data) return;
|
||||
FSEvents *fse = (FSEvents *)async->data;
|
||||
CFIndex idx, cnt;
|
||||
fse_event *event;
|
||||
char pathbuf[1024];
|
||||
const char *pathptr = NULL;
|
||||
uv_mutex_lock(&fse->mutex);
|
||||
cnt = fse->events.size();
|
||||
for (idx=0; idx<cnt; idx++) {
|
||||
event = fse->events.at(idx);
|
||||
if (event == NULL) continue;
|
||||
pathptr = CFStringGetCStringPtr(event->path, kCFStringEncodingUTF8);
|
||||
if (!pathptr) CFStringGetCString(event->path, pathbuf, 1024, kCFStringEncodingUTF8);
|
||||
fse->emitEvent(pathptr ? pathptr : pathbuf, event->flags, event->id);
|
||||
delete event;
|
||||
}
|
||||
if (cnt>0) fse->events.clear();
|
||||
uv_mutex_unlock(&fse->mutex);
|
||||
}
|
||||
|
||||
void FSEvents::asyncStart() {
|
||||
if (async.data == this) return;
|
||||
async.data = this;
|
||||
uv_async_init(uv_default_loop(), &async, (uv_async_cb) async_propagate);
|
||||
}
|
||||
|
||||
void FSEvents::asyncTrigger() {
|
||||
if (async.data != this) return;
|
||||
uv_async_send(&async);
|
||||
}
|
||||
|
||||
void FSEvents::asyncStop() {
|
||||
if (async.data != this) return;
|
||||
async.data = NULL;
|
||||
uv_close((uv_handle_t *) &async, NULL);
|
||||
}
|
110
express-server/node_modules/fsevents/src/constants.cc
generated
vendored
Normal file
110
express-server/node_modules/fsevents/src/constants.cc
generated
vendored
Normal file
@ -0,0 +1,110 @@
|
||||
/*
|
||||
** © 2014 by Philipp Dunkel <pip@pipobscure.com>
|
||||
** Licensed under MIT License.
|
||||
*/
|
||||
|
||||
// constants from https://developer.apple.com/library/mac/documentation/Darwin/Reference/FSEvents_Ref/index.html#//apple_ref/doc/constant_group/FSEventStreamEventFlags
|
||||
#ifndef kFSEventStreamEventFlagNone
|
||||
#define kFSEventStreamEventFlagNone 0x00000000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagMustScanSubDirs
|
||||
#define kFSEventStreamEventFlagMustScanSubDirs 0x00000001
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagUserDropped
|
||||
#define kFSEventStreamEventFlagUserDropped 0x00000002
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagKernelDropped
|
||||
#define kFSEventStreamEventFlagKernelDropped 0x00000004
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagEventIdsWrapped
|
||||
#define kFSEventStreamEventFlagEventIdsWrapped 0x00000008
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagHistoryDone
|
||||
#define kFSEventStreamEventFlagHistoryDone 0x00000010
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagRootChanged
|
||||
#define kFSEventStreamEventFlagRootChanged 0x00000020
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagMount
|
||||
#define kFSEventStreamEventFlagMount 0x00000040
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagUnmount
|
||||
#define kFSEventStreamEventFlagUnmount 0x00000080
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemCreated
|
||||
#define kFSEventStreamEventFlagItemCreated 0x00000100
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemRemoved
|
||||
#define kFSEventStreamEventFlagItemRemoved 0x00000200
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemInodeMetaMod
|
||||
#define kFSEventStreamEventFlagItemInodeMetaMod 0x00000400
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemRenamed
|
||||
#define kFSEventStreamEventFlagItemRenamed 0x00000800
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemModified
|
||||
#define kFSEventStreamEventFlagItemModified 0x00001000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemFinderInfoMod
|
||||
#define kFSEventStreamEventFlagItemFinderInfoMod 0x00002000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemChangeOwner
|
||||
#define kFSEventStreamEventFlagItemChangeOwner 0x00004000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemXattrMod
|
||||
#define kFSEventStreamEventFlagItemXattrMod 0x00008000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemIsFile
|
||||
#define kFSEventStreamEventFlagItemIsFile 0x00010000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemIsDir
|
||||
#define kFSEventStreamEventFlagItemIsDir 0x00020000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamEventFlagItemIsSymlink
|
||||
#define kFSEventStreamEventFlagItemIsSymlink 0x00040000
|
||||
#endif
|
||||
|
||||
static v8::Local<v8::Object> Constants() {
|
||||
v8::Local<v8::Object> object = Nan::New<v8::Object>();
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagNone").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagNone));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagMustScanSubDirs").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagMustScanSubDirs));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagUserDropped").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagUserDropped));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagKernelDropped").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagKernelDropped));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagEventIdsWrapped").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagEventIdsWrapped));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagHistoryDone").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagHistoryDone));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagRootChanged").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagRootChanged));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagMount").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagMount));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagUnmount").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagUnmount));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemCreated").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemCreated));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemRemoved").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemRemoved));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemInodeMetaMod").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemInodeMetaMod));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemRenamed").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemRenamed));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemModified").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemModified));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemFinderInfoMod").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemFinderInfoMod));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemChangeOwner").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemChangeOwner));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemXattrMod").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemXattrMod));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemIsFile").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemIsFile));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemIsDir").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemIsDir));
|
||||
object->Set(Nan::New<v8::String>("kFSEventStreamEventFlagItemIsSymlink").ToLocalChecked(), Nan::New<v8::Integer>(kFSEventStreamEventFlagItemIsSymlink));
|
||||
return object;
|
||||
}
|
44
express-server/node_modules/fsevents/src/methods.cc
generated
vendored
Normal file
44
express-server/node_modules/fsevents/src/methods.cc
generated
vendored
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
** © 2014 by Philipp Dunkel <pip@pipobscure.com>
|
||||
** Licensed under MIT License.
|
||||
*/
|
||||
|
||||
void FSEvents::emitEvent(const char *path, UInt32 flags, UInt64 id) {
|
||||
Nan::HandleScope handle_scope;
|
||||
v8::Local<v8::Object> object = handle();
|
||||
v8::Local<v8::Value> key = Nan::New<v8::String>("handler").ToLocalChecked();
|
||||
Nan::Callback handler(Nan::To<v8::Function>(Nan::Get(object, key).ToLocalChecked()).ToLocalChecked());
|
||||
v8::Local<v8::Value> argv[] = {
|
||||
Nan::New<v8::String>(path).ToLocalChecked(),
|
||||
Nan::New<v8::Number>(flags),
|
||||
Nan::New<v8::Number>(id)
|
||||
};
|
||||
handler.Call(3, argv, &async_resource);
|
||||
}
|
||||
|
||||
NAN_METHOD(FSEvents::New) {
|
||||
Nan::Utf8String path(info[0]);
|
||||
|
||||
FSEvents *fse = new FSEvents(*path);
|
||||
fse->Wrap(info.This());
|
||||
Nan::Set(info.This(), Nan::New<v8::String>("handler").ToLocalChecked(), info[1]);
|
||||
|
||||
info.GetReturnValue().Set(info.This());
|
||||
}
|
||||
|
||||
NAN_METHOD(FSEvents::Stop) {
|
||||
FSEvents* fse = Nan::ObjectWrap::Unwrap<FSEvents>(info.This());
|
||||
|
||||
fse->threadStop();
|
||||
fse->asyncStop();
|
||||
|
||||
info.GetReturnValue().Set(info.This());
|
||||
}
|
||||
|
||||
NAN_METHOD(FSEvents::Start) {
|
||||
FSEvents* fse = Nan::ObjectWrap::Unwrap<FSEvents>(info.This());
|
||||
fse->asyncStart();
|
||||
fse->threadStart();
|
||||
|
||||
info.GetReturnValue().Set(info.This());
|
||||
}
|
27
express-server/node_modules/fsevents/src/storage.cc
generated
vendored
Normal file
27
express-server/node_modules/fsevents/src/storage.cc
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
** © 2014 by Philipp Dunkel <pip@pipobscure.com>
|
||||
** Licensed under MIT License.
|
||||
*/
|
||||
|
||||
struct fse_event {
|
||||
UInt64 id;
|
||||
UInt32 flags;
|
||||
CFStringRef path;
|
||||
|
||||
fse_event(CFStringRef eventPath, UInt32 eventFlag, UInt64 eventId) {
|
||||
this->path = eventPath;
|
||||
this->flags = eventFlag;
|
||||
this->id = eventId;
|
||||
if (this->path != NULL)
|
||||
CFRetain(this->path);
|
||||
}
|
||||
|
||||
~fse_event() {
|
||||
if (this->path != NULL)
|
||||
CFRelease(this->path);
|
||||
}
|
||||
|
||||
private:
|
||||
fse_event(const fse_event&);
|
||||
void operator=(const fse_event&);
|
||||
};
|
71
express-server/node_modules/fsevents/src/thread.cc
generated
vendored
Normal file
71
express-server/node_modules/fsevents/src/thread.cc
generated
vendored
Normal file
@ -0,0 +1,71 @@
|
||||
/*
|
||||
** © 2014 by Philipp Dunkel <pip@pipobscure.com>
|
||||
** Licensed under MIT License.
|
||||
*/
|
||||
|
||||
// constants from https://developer.apple.com/library/mac/documentation/Darwin/Reference/FSEvents_Ref/index.html#//apple_ref/doc/constant_group/FSEventStreamCreateFlags
|
||||
#ifndef kFSEventStreamCreateFlagNone
|
||||
#define kFSEventStreamCreateFlagNone 0x00000000
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamCreateFlagUseCFTypes
|
||||
#define kFSEventStreamCreateFlagUseCFTypes 0x00000001
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamCreateFlagNoDefer
|
||||
#define kFSEventStreamCreateFlagNoDefer 0x00000002
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamCreateFlagWatchRoot
|
||||
#define kFSEventStreamCreateFlagWatchRoot 0x00000004
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamCreateFlagIgnoreSelf
|
||||
#define kFSEventStreamCreateFlagIgnoreSelf 0x00000008
|
||||
#endif
|
||||
|
||||
#ifndef kFSEventStreamCreateFlagFileEvents
|
||||
#define kFSEventStreamCreateFlagFileEvents 0x00000010
|
||||
#endif
|
||||
|
||||
void FSEvents::threadStart() {
|
||||
if (threadloop) return;
|
||||
if (uv_thread_create(&thread, &FSEvents::threadRun, this)) abort();
|
||||
}
|
||||
|
||||
void HandleStreamEvents(ConstFSEventStreamRef stream, void *ctx, size_t numEvents, void *eventPaths, const FSEventStreamEventFlags eventFlags[], const FSEventStreamEventId eventIds[]) {
|
||||
FSEvents * fse = (FSEvents *)ctx;
|
||||
size_t idx;
|
||||
uv_mutex_lock(&fse->mutex);
|
||||
for (idx=0; idx < numEvents; idx++) {
|
||||
fse_event *event = new fse_event(
|
||||
(CFStringRef)CFArrayGetValueAtIndex((CFArrayRef)eventPaths, idx),
|
||||
eventFlags[idx],
|
||||
eventIds[idx]
|
||||
);
|
||||
fse->events.push_back(event);
|
||||
}
|
||||
fse->asyncTrigger();
|
||||
uv_mutex_unlock(&fse->mutex);
|
||||
}
|
||||
|
||||
void FSEvents::threadRun(void *ctx) {
|
||||
FSEvents *fse = (FSEvents*)ctx;
|
||||
FSEventStreamContext context = { 0, ctx, NULL, NULL, NULL };
|
||||
fse->threadloop = CFRunLoopGetCurrent();
|
||||
FSEventStreamRef stream = FSEventStreamCreate(NULL, &HandleStreamEvents, &context, fse->paths, kFSEventStreamEventIdSinceNow, (CFAbsoluteTime) 0.1, kFSEventStreamCreateFlagNone | kFSEventStreamCreateFlagWatchRoot | kFSEventStreamCreateFlagFileEvents | kFSEventStreamCreateFlagUseCFTypes);
|
||||
FSEventStreamScheduleWithRunLoop(stream, fse->threadloop, kCFRunLoopDefaultMode);
|
||||
FSEventStreamStart(stream);
|
||||
CFRunLoopRun();
|
||||
FSEventStreamStop(stream);
|
||||
FSEventStreamUnscheduleFromRunLoop(stream, fse->threadloop, kCFRunLoopDefaultMode);
|
||||
FSEventStreamInvalidate(stream);
|
||||
FSEventStreamRelease(stream);
|
||||
fse->threadloop = NULL;
|
||||
}
|
||||
|
||||
void FSEvents::threadStop() {
|
||||
if (!threadloop) return;
|
||||
CFRunLoopStop(threadloop);
|
||||
if (uv_thread_join(&thread)) abort();
|
||||
}
|
Reference in New Issue
Block a user