{"_id":"gepard","_rev":"46-340e827c4d03bb0c363823eed901e6ac","name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java, Python and PHP","dist-tags":{"latest":"1.9.4"},"versions":{"1.0.0":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages","version":"1.0.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2"},"devDependencies":{},"gitHead":"69fa21419902a9aef1d4e240078df4d017116408","_id":"gepard@1.0.0","scripts":{},"_shasum":"4a662eb6392a6799139b2eb65c4b7461ef494c4a","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.25","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"4a662eb6392a6799139b2eb65c4b7461ef494c4a","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.0.0.tgz","integrity":"sha512-L8I6DzA9vIKGK/eDJlM5aEbNL79HCj8AnR5mi3srewAxUyjBFXLyBwUHR6IytkABbzpXe//abIfsrChe5v6FHw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHkAtYYDVnLSVcxkGu51X8mrTwXRWe84oOx3x2sVEW/iAiEApKlYzBN1ikEd9Du6DTWLKEU1RwwEltqxVxdXJNJ2HA4="}]}},"1.0.2":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages","version":"1.0.2","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./src/Semaphore.js","gepard/gp.lock":"./src/Lock.js"},"gitHead":"b43876150c5d53f86f64f37767a841095628f420","_id":"gepard@1.0.2","scripts":{},"_shasum":"48850477c0da6263d4c29d0d30e9d1afeaae561b","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.25","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"48850477c0da6263d4c29d0d30e9d1afeaae561b","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.0.2.tgz","integrity":"sha512-zSOcU97L5Gh5Otm6iYnHWgQg2dROLKRdrY1xXjU3mSYSpgQgjFJzO/e/CEzMeQVUm8RXqB9gR5QT2+4HH42CJA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEu/ZWuj7ELPPqgfoR88vgjsjjTRRNbr9S+o8vfVI/fAAiArUsYUg3LVu9cAoaIYIyn0jS7xPB6D31mRzwQYpczopw=="}]}},"1.2.0":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages","version":"1.2.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"015419896184722135196211f24b8333faab3c45","_id":"gepard@1.2.0","scripts":{},"_shasum":"84f66736f5f37c9e4d2d3cd679eca254e1f2caf3","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.12.0","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"84f66736f5f37c9e4d2d3cd679eca254e1f2caf3","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.2.0.tgz","integrity":"sha512-a0eUmREzURdx9NfYmQYD2vTv9s0VoYIjcQzpGLXne/uRpvPfg1Bq2DhGZ1ONHJdK/TFmNvCeRDcP/JNHeIguhw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGWmUVBS9FLrLhUQ/lbeWWCHpqYhF8yRXS50zzQYSgbEAiAHryjA/s7VsPGs20MYvpVwhyLLm3AfufM+1QWcYHHomQ=="}]}},"1.2.1":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages","version":"1.2.1","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"3455273900c7c14a252341b75b844afdd9c21778","_id":"gepard@1.2.1","scripts":{},"_shasum":"478b973c2971deb9838d66678ab57ab500dfc1c9","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.36","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"478b973c2971deb9838d66678ab57ab500dfc1c9","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.2.1.tgz","integrity":"sha512-/3Npko9GL3uw/G3Foz2AdTrxoJg4cO1XIU2lKV3rF5UDI+XtGZaZvDHb4loMuUvyasOHH1V8+D9Ag7jH/E/tKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA252nRdNrBdKkLFnSZizrlY6TyuJdGCQvTOHOoWv96mAiBBrOk/QMUKuy3t8udB5xBCkVblIjjine/RymRjK8wSuw=="}]}},"1.2.2":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages","version":"1.2.2","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"304bd4ee71935e0acb81a9e434742b660ad36b50","_id":"gepard@1.2.2","scripts":{},"_shasum":"b23dda24f03ef2fa66d7474835d70e9b40c4ba4d","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.10.36","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"b23dda24f03ef2fa66d7474835d70e9b40c4ba4d","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.2.2.tgz","integrity":"sha512-JAro/SCAMFyMV517kOcJa1uYLODvxgYTZN7o0P6BmpAz/KtuksEzW/pmkxjrCxPtBBgpKB8nVLW/mHGojErQtA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDkbI1z7X+ysnPZCkL6z1hd/dDyMkG1SMASIaI1SUIU6QIhAIoiMn77gkax0s3cV5InyF1KLboCKQpiOEYdrLQp0IKr"}]}},"1.2.3":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages","version":"1.2.3","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"858f208e609efd48f699de1c2db8e231a40113cb","_id":"gepard@1.2.3","scripts":{},"_shasum":"467fae5184789165e864a4c972eb7ac7c352b4fe","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.12.4","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"467fae5184789165e864a4c972eb7ac7c352b4fe","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.2.3.tgz","integrity":"sha512-yGzlV1P/HEwEKK6M+6fO3VaxWgUX+eCYPSFm/TgkwRqEdzIp/f8E6C+T6V04Q+HKKHtKYPm2FD1BWGPdL+lf1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMVzJOO4c+kwnW5q+OQ/W/bo/H65OpmIe2GbnwYDrIcgIgKyG/OO1NR4HWKJZWQ2hejryYdSA+6jnog6FrdpU3XyM="}]}},"1.3.0":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages","version":"1.3.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"e30950ecd8d20e7857567a4a1e0cd8abe80aefb6","_id":"gepard@1.3.0","scripts":{},"_shasum":"299a1181d8d7cadccbe7ed6d136ff93f037b73e7","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.12.4","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"299a1181d8d7cadccbe7ed6d136ff93f037b73e7","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.3.0.tgz","integrity":"sha512-vNWAQJuao5USQ5iC1U3eduqVr/jhwjeuEiGWG2/sGnaX2cVVrW5i9gSBDX6GXJj4rv6NYPHn4uLUaph1x7nRMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD+MwWHcmDGbTpXiuYYRGR+KFTZE7BA8JIVTiWWKU9q3AIgCXuAHLY+RjRoW7cOEPHiToCFblfLBV9rfobiJIxZoTU="}]}},"1.3.1":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages for JavaScript, Java and Pathon","version":"1.3.1","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"55d2128a74c048df1d475f59ca80a74ecdba0453","_id":"gepard@1.3.1","scripts":{},"_shasum":"92f86d70f821c61275c2e9b745ee6d4cb42b78be","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.12.4","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"92f86d70f821c61275c2e9b745ee6d4cb42b78be","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.3.1.tgz","integrity":"sha512-rJFT/pMSalO+lgDRdU/fHrjByv18o3gKEhWzCp1jlkvzYGPVeHnZd9Ni//H37SHxTeK0S8Fde1Q03OWVvg+A7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQColvDIUopC8b1LtRZ3GZYal3x/FIOymIOAa/TipmBc2wIhAPJ4Zyq1oisFp4BWcE0GmHAOuEBYMRsuinxm4QnvSm/p"}]}},"1.3.2":{"name":"gepard","description":"General purpose commnucations for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.3.2","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"b8651af0abea2dfd5ffe750b9a31447ad03f5098","_id":"gepard@1.3.2","scripts":{},"_shasum":"4f3e0d3fa0a2080a8c01baf0ded6cb5d783298ca","_from":".","_npmVersion":"2.3.0","_nodeVersion":"0.12.4","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"dist":{"shasum":"4f3e0d3fa0a2080a8c01baf0ded6cb5d783298ca","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.3.2.tgz","integrity":"sha512-084k+1h/dwvb8fJhRsdnQ6gjgLYvynL6o800Km8d8sWZc8MyntjaDCHldECC+UoJCMKQptzKDcfilZ5mHzAjhw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBBM2K9cGAFKJ+5ycSo3E5jwuCK52OjEBw5Q+r6FWajVAiEA9Rj9y5FQwt2DfU5wLCva6R+S3O7jz6s/zPsZZseDyvU="}]}},"1.3.3":{"name":"gepard","description":"General purpose communications for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.3.3","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"e386be5441eea49a89cb583ea494134e91606a40","_id":"gepard@1.3.3","scripts":{},"_shasum":"6b4fd578b661a6413c6c13a3ca4cff0aa5e370f9","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"6b4fd578b661a6413c6c13a3ca4cff0aa5e370f9","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.3.3.tgz","integrity":"sha512-elXILsehsaEwNkgAy6aBdKui7AkcG7poqzMbzA5RMMRYOw0gB7Vv7k1A0RdDxXh+pY6L6davEnNRd5t9mbggiQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKXZ+rj8kTS67UuWmiQvm/ByQHayu9RGctEELfH84b/gIhANdc1HpTr83u0JS6hvswfH8pQEppc79bhapD7ZZrLZu2"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}]},"1.4.0":{"name":"gepard","description":"General purpose communications for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.4.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"3b9e9dbdf0bd9aa4a02c3c3a438424f7f3e54fd4","_id":"gepard@1.4.0","scripts":{},"_shasum":"da2b2f8a889a4532723b38716e69334bd9b965f4","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"da2b2f8a889a4532723b38716e69334bd9b965f4","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.4.0.tgz","integrity":"sha512-NiEVOZMrYPO7jnvhtNBJWZW1zLbNPa12/SVEhVnA6Yk90hbykZhRTeZvTKOdHT2jW9QJzLsRLWHu7ol8yDbDvA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1UUhDPVNktTN+pzDnNDyFkEhg0N++LgzaWGNdv262LAiAxQYaxs6goZsGpiQITNIe4lfUm7SmZB8nQa8/9Ox0uHw=="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}]},"1.4.1":{"name":"gepard","description":"General purpose communications for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.4.1","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"4f6b528cb8703e9e0362de80334f1366f821d4da","_id":"gepard@1.4.1","scripts":{},"_shasum":"6debf47d3f11cbc80a2abaff557043566877ef95","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"6debf47d3f11cbc80a2abaff557043566877ef95","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.4.1.tgz","integrity":"sha512-ZmM+mbNJVtBZwUew1bwDJIDto1c8YfV0TfRs81JEdxhoY2zusvc8fCIzy1lS2afYRXox0wBXvDLSqv4iic/Chg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/3NscWgYpk6vLmm7MaKuJjILeGOEj5/SiFtbmlyEOVQIhAOE+gYwy1pWr2t2O5ea93JVm3GNjZc66ftAtljIcrCly"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}]},"1.4.2":{"name":"gepard","description":"General purpose communications for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.4.2","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./src/Admin.js","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.emit":"./xmp/Emitter.js","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.lock":"./xmp/Locker.js"},"gitHead":"d2aa8974b5a918e17d4451862383055a423f7a8f","_id":"gepard@1.4.2","scripts":{},"_shasum":"966dededf7e85e5661abce0bc99a080d71755f76","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"966dededf7e85e5661abce0bc99a080d71755f76","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.4.2.tgz","integrity":"sha512-kEaGLG2C+1AydEpZG6f2rD2W7FWV9UoWfdPF1piCc6eoGLRZf0WJodMCiTMQvN7WpYDA70WHft0TBlCYRzku9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDKwZGRuLPSvrjuIf4gxh6NakCsei8yUpmktgnDY9lwfQIgZmXY+596f4pAu0y3D6XZqt3zWTYRwUIDvxWQyxdgN98="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}]},"1.4.3":{"name":"gepard","description":"General purpose communications for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.4.3","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/admin","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.action.info":"./bin/client.action.info","gp.client.execute":"./bin/client.execute","gp.client.tp":"./bin/client.tp","gp.client.tplist":"./bin/client.tplist","gp.client.tpoff":"./bin/client.tpoff","gp.client.tpon":"./bin/client.tpon","gp.tplist":"./bin/tplist","gp.tpoff":"./bin/tpoff","gp.tpon":"./bin/tpon"},"gitHead":"43c81b598fa04199a12f697327ed15c0f9667450","_id":"gepard@1.4.3","scripts":{},"_shasum":"a9683fe5021eda1a7b9a0ba3a2ea97644217ecde","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"a9683fe5021eda1a7b9a0ba3a2ea97644217ecde","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.4.3.tgz","integrity":"sha512-ExuRPCSqRADhmYSsinNdaL8rwji+ehhpNNQ5I9ghuYuVzGU+kAvwQNug+yk1pF3bfMEL70uSa3IMyjyUjS5pew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDRPFjJBGA9+UcDSG+wKczlqRdLAqUFOnFM9zo9zc1IAgIgMeyfETxs7k+dCBC2VCzUmjuye21haUZZqEjJ77xptDQ="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}]},"1.4.4":{"name":"gepard","description":"General purpose communications for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.4.4","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/admin","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/client.tp","gp.client.tplist":"./bin/client.tplist","gp.client.tpoff":"./bin/client.tpoff","gp.client.tpon":"./bin/client.tpon","gp.tplist":"./bin/tplist","gp.tpoff":"./bin/tpoff","gp.tpon":"./bin/tpon","gp.tp":"./bin/tp"},"gitHead":"c509d760dd98aeea373cf2f5c6a022f4631552e7","_id":"gepard@1.4.4","scripts":{},"_shasum":"a335675ca19e5b233418671168a7352b0741bda6","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"a335675ca19e5b233418671168a7352b0741bda6","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.4.4.tgz","integrity":"sha512-QHUaUsjLqBYTzBPWSBgJWyRZHEsWEqiX7qHCdoD11wnuLrQjuplAM7xI/M+TNjB+JFkMzoMoImLJwK6pyKA5kw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCCnJ9EAM4jjWqCTI/yrQXQv6ku60hxavvWICGgB4dPgIhAKFhHsX4VV0S4CIlZhfxQH0m1MMjrg4SWb6z3A6zp2Sx"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}]},"1.4.5":{"name":"gepard","description":"General purpose communications for distributed applications / events, semaphores and messages for JavaScript, Java and Python","version":"1.4.5","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"nodejs-websocket":">=1.2","mime":">=1.3.4","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/admin","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/client.tp","gp.client.tplist":"./bin/client.tplist","gp.client.tpoff":"./bin/client.tpoff","gp.client.tpon":"./bin/client.tpon","gp.tplist":"./bin/tplist","gp.tpoff":"./bin/tpoff","gp.tpon":"./bin/tpon","gp.tp":"./bin/tp"},"gitHead":"acde92e2034f26bd74ef9dabf56e92043839d235","_id":"gepard@1.4.5","scripts":{},"_shasum":"42d9ac68e7a128a8c2af5d31d0293b87497a699d","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"42d9ac68e7a128a8c2af5d31d0293b87497a699d","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.4.5.tgz","integrity":"sha512-lUaAEU8D4Hr6FpxxLrtXFXTQu20oLLESZ5S29baCk2NX9tWBlZLvlDj/NxZG//6+93QShjee5Ls5BCUcNv/cvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD+cl3n6DpfEzpzDrUQrEes3RVArbJQM6naScB77RwwvQIhAPJ6/Ri/Hzz4CxQ4iZOsO32P6RIz/OueRZx7w8GsTH5A"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}]},"1.5.0":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.5.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/admin","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/client.tp","gp.client.tplist":"./bin/client.tplist","gp.client.tpoff":"./bin/client.tpoff","gp.client.tpon":"./bin/client.tpon","gp.tplist":"./bin/tplist","gp.tpoff":"./bin/tpoff","gp.tpon":"./bin/tpon","gp.tp":"./bin/tp"},"gitHead":"f8cc4d8457fb315c8f0cd42b8679b0bf403ad7be","_id":"gepard@1.5.0","scripts":{},"_shasum":"2ddaac6405ea8eb0a4a925375933d5051aa0f484","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.2","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"2ddaac6405ea8eb0a4a925375933d5051aa0f484","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.5.0.tgz","integrity":"sha512-qONVsLTkm8MqFI0PWhb34WrbkDs1XMIfOV7+bDC6ZKEUUM/bZCeO9wW3gp3cEU9ghgLIy90H5WgBv4K9jofioQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFp1AfBWMwNa9Qk9g3Kf6gqYkpga08+QOQuF8YZ7bvzFAiEA6VUuYygv4Zgiq3/K/NWW36wx+7+DHc2B9KfIptlUMug="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-6-west.internal.npmjs.com","tmp":"tmp/gepard-1.5.0.tgz_1454605332298_0.4853424350731075"}},"1.5.1":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.5.1","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/admin","gp.broker":"./bin/broker","gp.broker.no.web":"./bin/broker.no.web","gp.shutdown":"./bin/shutdown","gp.info":"./bin/info","gp.http.simple":"./bin/http.simple","gp.http.simple.is.running":"./bin/http.simple.is.running","gp.http.simple.shutdown":"./bin/http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/client.tp","gp.client.tplist":"./bin/client.tplist","gp.client.tpoff":"./bin/client.tpoff","gp.client.tpon":"./bin/client.tpon","gp.tplist":"./bin/tplist","gp.tpoff":"./bin/tpoff","gp.tpon":"./bin/tpon","gp.tp":"./bin/tp"},"gitHead":"5b3fe85f1bfbac620370e537fea011f7183061ce","_id":"gepard@1.5.1","scripts":{},"_shasum":"eb3dc989d52a057e0dcc7118411c868e4e43a1ca","_from":".","_npmVersion":"2.14.7","_nodeVersion":"4.2.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"eb3dc989d52a057e0dcc7118411c868e4e43a1ca","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.5.1.tgz","integrity":"sha512-Nd74C4RBWRfv55PVnTBjKXjt1N7CedFrnmc/zqlharGsnaweSoWH8ylbMDb3VlHZjmAPiMZQThHm6pqgyvI3Ow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGisac++2wf172iqTLBRlbGaE2Dmlr7dlOZ9W19Q8gDwIgbBeO9sLnaXIoSi7fdZANQP+NsjyvcaXsiZ9otSm6nWw="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-5-east.internal.npmjs.com","tmp":"tmp/gepard-1.5.1.tgz_1455488872134_0.19697756110690534"}},"1.6.0":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.6.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{"wait.for":"^0.6.6"},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"gitHead":"5e1bcd0241cc35d2650a55c54cbbb37fddbe01e2","_id":"gepard@1.6.0","scripts":{},"_shasum":"4e2bc30b156d27f686be6106c425fcae073b91d9","_from":".","_npmVersion":"2.14.12","_nodeVersion":"4.3.2","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"4e2bc30b156d27f686be6106c425fcae073b91d9","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.6.0.tgz","integrity":"sha512-CGcVL0+MRirSSI1YepO4CWuIX1aa5NdF9oEc5eOEazFmRWcOuXhNygJebsUbnAjD/Iq45C+yNG/Etvf50myizA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGouxj9VIUqs8PZroYz99iF4LcAD1EG1QWraDXjDL4XPAiA1I/55h22exRRpR92ifgsov/SvBpQqj0VYX4JWmoEBbw=="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/gepard-1.6.0.tgz_1460392333362_0.800031865015626"}},"1.7.0":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{"wait.for":"^0.6.6"},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"gitHead":"164f117a5e2bcda2be10eb377d94ae08caa7586e","_id":"gepard@1.7.0","scripts":{},"_shasum":"31aef288c9775a6e62c831520f27feecc04ed041","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"31aef288c9775a6e62c831520f27feecc04ed041","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.0.tgz","integrity":"sha512-AHp73WLCJCM6jp58XBfJbN+Cctvpx7odvIy2ARIM0IdAXicI/4uiMzVDcmgU0R8JjxHXBxli/tk7b4SMAg8DcA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICTTGwY5BcX957BTZ6hZ5H65DzVQLtvEbkvaweTzS2wQAiEA5OBKG/nEq1fnsa7Bw6fcBhUN/rhStYdmb+UhiYzV7Lo="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.7.0.tgz_1464096106736_0.822641362901777"}},"1.7.1":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.1","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{"wait.for":"^0.6.6"},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"gitHead":"9c0db6b157bbfc4b0d37d6dc86dab2b4c23c3d8f","_id":"gepard@1.7.1","scripts":{},"_shasum":"d80548712717e66b7b624b89c16f5aa6345097d1","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"d80548712717e66b7b624b89c16f5aa6345097d1","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.1.tgz","integrity":"sha512-qB0eOXUmDcj5biDeUwDg52vlJSqnE/hBwbeFp5CgmQx3seTSuMBqNZjL90ki2KF9MGBziH5yi+gqn7SHiVMMdA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1PtaRbQCOIb/0veLMbY2xKIUq95rdRrRvdRBhSJuULgIhAJ289fXXn4+ad8JdO4iSW0GW7ik2b7eB2ppWYdGhr10w"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.7.1.tgz_1464102005301_0.16520286910235882"}},"1.7.2":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.2","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"index.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{"wait.for":"^0.6.6"},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"gitHead":"9c0db6b157bbfc4b0d37d6dc86dab2b4c23c3d8f","_id":"gepard@1.7.2","scripts":{},"_shasum":"691698f446709e3964bd461aa7471a4922f77835","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"691698f446709e3964bd461aa7471a4922f77835","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.2.tgz","integrity":"sha512-SoVeuS5YTJIlku1EMZIQ8z39xI6pgetOBn1YCIw1QbXSXKsBgLLhbD1TPF/tIm0hgyu9lp33a0pMFrQ0LFf+6Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA9a+DzcUsDIo7+SJ9R7fM7ZF8Li+P26LODidqNPBIo5AiBMbBveOp5JySg6LeV2/p6ecsgoDdQbvLD0GPFIQgX33Q=="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.7.2.tgz_1468411891435_0.8223473839461803"}},"1.7.3":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.3","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{"wait.for":"^0.6.6"},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"gitHead":"c41414f246e3ae1651b8ad53f74414f4b4bedcb7","_id":"gepard@1.7.3","scripts":{},"_shasum":"855144f5494afbb924f37d54a87c53ec2b571438","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"855144f5494afbb924f37d54a87c53ec2b571438","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.3.tgz","integrity":"sha512-P8+s/P7wg/6kFfkAwHy/ct0eXGEl/kF6lV2I3l4xf3954H2k2WM1MUR/nK4WTiv8Z9BKj+McywAT1F7hpogaXw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyicAEp76OL6Z2Ev6HLfgOQ4HXpNlHcnvY/5qJPDBMYwIhAKuzVEi3ZqlTvDxvx2Q2fHk5ee0d/SYZPkRVG3MEb/rO"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.7.3.tgz_1468416828975_0.09513324033468962"}},"1.7.4":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.4","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{"wait.for":"^0.6.6"},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"gitHead":"878181098fdcf5fa676afd93585457554c078d81","_id":"gepard@1.7.4","scripts":{},"_shasum":"483cc5de38a5baa4e751175cfad162a8a6aead7f","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"483cc5de38a5baa4e751175cfad162a8a6aead7f","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.4.tgz","integrity":"sha512-PpAOyV0fJQWU1U875P4ld7BYmWLovlZKOSnn8SGq54yQQzP1Z6Pfv2i/h06MlqMSdGotsWaO6KnnfzCr47C2cA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+nwYc2oqd2ksgEjGWCM8j/fgCI0/lxvYvZajQd7NZqgIhAMEPPWGk9wNCKuyEJ0PZ2VuliNpHs9TkQlIrZAnCv3uL"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/gepard-1.7.4.tgz_1468421891440_0.8390161192510277"}},"1.7.5":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.5","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"d11db52d0f25ef77d77a92375716bffd165c3791","_id":"gepard@1.7.5","_shasum":"83ac8cfb72b1692c01136c476916e9ec78b73510","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"83ac8cfb72b1692c01136c476916e9ec78b73510","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.5.tgz","integrity":"sha512-fIM+63GVGL+f+cWqROTUNy0A+O5+gxVmyQuKKfRVbhOacudww3L7Sk+3m7Soe41+Els87m4NU9Y7QGoQyhfkcQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICzKu47894/tlXoUg8CzBjkFrbOETE7mCz1bze5z9ZqwAiADxHkYlBAQTaMyDES3wg2aco8iwnGqZ6XKsu+9BIJ2Vw=="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/gepard-1.7.5.tgz_1469823963000_0.40880102664232254"}},"1.7.6":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.6","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"41bc597e3ab4e88f012f398a1343d118b091fe17","_id":"gepard@1.7.6","_shasum":"247bb059343f4c1d37d62f25e315e472ebcae6c1","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"247bb059343f4c1d37d62f25e315e472ebcae6c1","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.6.tgz","integrity":"sha512-fh2baWp/Nl6KiwbOsBl6XIDxQYiWmvPJ73x3s8JVKZsqDQ5dwivDKqlE8LohrCIFfeUrzMx9fYlWAA0D8Us/pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNiX5Xp3WDt1fOh9JUdk81jmOPHQ9bZsxgib/7syrIQAiEA6Vu1H5QvLTfEfMPYw7OYd2At9nPcTtxb5HhIksPvomQ="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.7.6.tgz_1470147566930_0.6876901329960674"}},"1.7.7":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.7","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"633a6c0585a459bba3a7fbaa25894b3e118b9728","_id":"gepard@1.7.7","_shasum":"0ce3b848f2d05c8771ea7eeda3b716cc223fdb44","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"0ce3b848f2d05c8771ea7eeda3b716cc223fdb44","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.7.tgz","integrity":"sha512-9ZxUvTvF0xa4YNhairY5bRPTEG8b7OpHe4N+bYOa/ph0VmSQLFw/3wg7oOvS2JZlEk01vMSFqj9usWOwIK1c/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDT1V2pedaTr+CWb6rtd3/rujmSz3USJidDUhx7QhOf/QIhAO6jAcAEi1HXLDQYOYlYtNbuIF+X/Qy9z8K1r0ZJo0LE"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.7.7.tgz_1470148101994_0.3736051640007645"}},"1.7.8":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.8","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"71923fd19bdde1a0e46d93178ffe8b1bfdbe9220","_id":"gepard@1.7.8","_shasum":"d59c28b0da3b38881cbf760d45bdbc638efe1583","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"d59c28b0da3b38881cbf760d45bdbc638efe1583","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.8.tgz","integrity":"sha512-IVV1HgwABptRvD/dqrK34oCp95AHXiqGLG4hnxUnGDJS/8DCOko6UDSDhFaPoJr6MLQEJXrmofY3zkHHSSweMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDl2OvYeqWhnuVyQb06OtQfmUG1XYywNbiJ91plOHSkTQIhAK4ULLcghr63eKST2tdaJfp2WsB5piUnFyuT0zILwVDF"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.7.8.tgz_1470924992782_0.2618933808989823"}},"1.7.9":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.7.9","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"68575f6ce64efd1b017063a2d643faaeb91adfa6","_id":"gepard@1.7.9","_shasum":"c27a61da9b4b96e2b51038bda173e71a757904d7","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"c27a61da9b4b96e2b51038bda173e71a757904d7","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.7.9.tgz","integrity":"sha512-mfhIM1aDzbuDxXUg22sYleUKo4mKAaGLDQxghcUg4T8m2+eLrQoyKzCgw4srV4H6Y+VMrJxlpUZcC3jFRl+y5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIARkIj6XgjirNoN+8UUuYa/dAvj3HtnK8SqdhJoHAroIAiEA4AJM3SjIezy2kWe3Z/hByyMovWIOY3HSrlQlWTzbxks="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/gepard-1.7.9.tgz_1471346571633_0.20234826626256108"}},"1.8.0":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.8.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"84cb0050bb160a1f9f01ccddf092701db45f84b6","_id":"gepard@1.8.0","_shasum":"5e9edee229812fcfb5381e22202dbbe91170cf6f","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"5e9edee229812fcfb5381e22202dbbe91170cf6f","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.8.0.tgz","integrity":"sha512-b42Rci/EOS8FdweGoRlEMekl3w/6ZMCxdZxKyfsk6jXoOvSFI7t5jozz6btyPtuFEjdbuQz+1jnIj0bq/LQgyQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCiBUEvpSkCJp9c6LVM+4vdpRyx3qkl3/RYtONpVYHITQIgJCzU7NOj1iIGnvK6nVktdea1pH6y5UWk7KdjgFnDeEo="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/gepard-1.8.0.tgz_1472234979881_0.4955913214944303"}},"1.8.1":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.8.1","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"9fe4dcc5d44e68e698757843de04db203d437e0c","_id":"gepard@1.8.1","_shasum":"6990622149f87021a21a7de4a91f6d60992b262e","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"6990622149f87021a21a7de4a91f6d60992b262e","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.8.1.tgz","integrity":"sha512-fqhD36u2GG4edpOONvd0OVmGyKhBxTt+A4/Cr5EWwIx2+UYfeFyLgwSKO+T4hNrPo/+0tQYK+FKvYHhvZa1AdA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQrc/pV31jfalqD7vayTmzukNEdeNm6In4GjRpx4Ts+AiAsf2R02Yro7D54IxhYmxpdUa2BXYPGSgLY2LRH9TNiDQ=="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.8.1.tgz_1473699485740_0.04062777804210782"}},"1.8.2":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.8.2","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"5a6f22ee2b609b1e3ef1b659e0c20ffa9bf04b03","_id":"gepard@1.8.2","_shasum":"38124d61d9692d21b94883b5e83f1593e58e6f8e","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"38124d61d9692d21b94883b5e83f1593e58e6f8e","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.8.2.tgz","integrity":"sha512-2+IKrdY8t1nI1dIRaiFbV6DPQTjHPPIBVmer2SBzr5DnbZjv09Lh0NWPJOYrBVcoirvZjZkTGdeb0q6ijTmhtw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/6YwJK8mzP8w5t9XPqYiLkiORba7KEdI5EofGyCdtHAiBXvDaelq/INBJQalxfVYzpiZ5lfNkhv0BZmQ5QhW+xYw=="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.8.2.tgz_1475849802659_0.437507641967386"}},"1.8.3":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.8.3","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"2cef484dc2d1f9a7a2eea1472544603c13253baa","_id":"gepard@1.8.3","_shasum":"ba04a7ad5d3109e4ffae4c93fb9c96d83f455396","_from":".","_npmVersion":"3.8.3","_nodeVersion":"5.10.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"ba04a7ad5d3109e4ffae4c93fb9c96d83f455396","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.8.3.tgz","integrity":"sha512-yltv9hLtKBx9611pU73jyFQAjQ4ZmGPogBoTfQqtNMYCQhHh8m3Gj3RVvLEI5Vqo4A34DLxoCQs4U2ehLCWr3A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAxBEEVyj4bqsc1REKhiy0VbzUgux4GCombxIRivStQtAiEA00UkMPTHEb4DrTS3YcoOOf+WR0/JbBz2hJ1YWoXgYOg="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/gepard-1.8.3.tgz_1484754322165_0.39211140805855393"}},"1.8.4":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.8.4","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"4a9c9c449ec34a3fc2c6b11c4879e75cd4777f64","_id":"gepard@1.8.4","_shasum":"ac2e17dc5045b5c836bb8a51493fb79ebd2c50f7","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"ac2e17dc5045b5c836bb8a51493fb79ebd2c50f7","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.8.4.tgz","integrity":"sha512-2upZcLJYjqlrS+kW53M0Tjn32As9qzeNq0sPhsg/JuzXTslIkDgKrAuGimMwpwwvQJ6jHC087cDp37yK8MxTrw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdXnL6tIzT8jZdGgbwxO0X0SGWwkuEP3VlJK7Ggcl8CAIgcqdnRU8CLNrQ2h/amHjt4Hnza4c13Z3je4wAZCqsgsE="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.8.4.tgz_1486040656126_0.5172346804756671"}},"1.8.5":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.8.5","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"8baa8f06f538827e750d26e791ec0c8a81a95fe0","_id":"gepard@1.8.5","_shasum":"4d65a9363ff9c2016785f59ec1ae25bade24cf8c","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.5.0","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"4d65a9363ff9c2016785f59ec1ae25bade24cf8c","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.8.5.tgz","integrity":"sha512-d1ZmFJ0vT7BgKvbRsgjnERngAJXMoeH7RT9A+5JRZ6Sg1s5/PTLZKO6jG+g//M9EyErOkXrH8c4UKJkwmCBaXQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC5Q8OanzT/b0Ift8faK9WCY29Z2407lG3SQZmBRH6CugIgX8UNUis2GjCCSZoMgrOjtd3Mv8tcAdEekUdbHJPML40="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/gepard-1.8.5.tgz_1486047016450_0.6418166593648493"}},"1.9.0":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.9.0","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","PHP","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"750ef217152f4e32697c077fb05efa86cb79a4a4","_id":"gepard@1.9.0","_shasum":"199f9c7cf0914d92132ff1de09fbf2a8b10c634e","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"199f9c7cf0914d92132ff1de09fbf2a8b10c634e","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.9.0.tgz","integrity":"sha512-8u9RtVdTZ8nHK0swXGqWVpm3WJeqEJ//U7oNfrvp5DZ3BRQbXpwBW0kYCbCkQlv2BFiM6ZD/kK55X03rBBBS+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCpt68C8grgwS+DGGEvO19mIEAFUZPBDFjZjz2ZWc6RVAIhALWoIltIoay6H/aES7nSFxVcYw2pwL4crzc4CRZRPiOV"}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gepard-1.9.0.tgz_1500482403453_0.9833948463201523"}},"1.9.1":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.9.1","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","PHP","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","mkdirp":"^0.5.1","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"29820e85fa7d3abdbdeef2ce96f5dcad8d130851","_id":"gepard@1.9.1","_shasum":"5d9c36ce630e9bc4451105f66d5bfc5cec04e767","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.7.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"shasum":"5d9c36ce630e9bc4451105f66d5bfc5cec04e767","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.9.1.tgz","integrity":"sha512-roqFvg25j4CCGzQe4GmLMsqfYlse+SmLLeh477wCsv74mWJIfKefWnHPh/amvAx406xfoeBMDsa3NRhhUhUGIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDtNnu2WCdq3jsloON4Pl5U0RFkjKyXraezWWu019ellQIgFGnsZ3TiGlvX/irUahELJPra8gsd3fTuCftc0zQJ+Ng="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gepard-1.9.1.tgz_1501624368388_0.14837781735695899"}},"1.9.2":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java and Python","version":"1.9.2","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","PHP","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","mkdirp":"^0.5.1","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"e21f138ed478836144514536eb28b69e50f16c91","_id":"gepard@1.9.2","_npmVersion":"5.3.0","_nodeVersion":"8.2.1","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"integrity":"sha512-FjoUkR6klVYSpI+S/bAaMTStHSsXQgAW/ojeymjsj7Yf2oaHaNuMV1FHHbCCd0pw8bV6AsPxTjPXs25eAtF80w==","shasum":"a19cf7a27d6c4756c3014a0d7f97a875078417b8","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.9.2.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDqF7v65uZnhaOhl+SdRBo2/rhqjz4FMQ8NKf6PZeAn5AiBtWfBqgtxzbhZbg2kjZfaeOsPL/4soJAq6oqcDDnN+fg=="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gepard-1.9.2.tgz_1503167782859_0.2769062044098973"}},"1.9.3":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java, Python and PHP","version":"1.9.3","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","PHP","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","mkdirp":"^0.5.1","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"7858ffd7c012a9f41210b1c3f96baf8a09aee115","_id":"gepard@1.9.3","_npmVersion":"5.3.0","_nodeVersion":"8.3.0","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"integrity":"sha512-cQ5r4DrMDZg3uojK1hLIKL86ZOatbw5lJbXBdoe88VRPqZzrow88VQ2HHzaGhcLaeKun/MtpYwhgVRUrqAKAcw==","shasum":"ef0f6b65c886f7e5d01cedfe57bc55782e7dad6c","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.9.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIElUrDzn3JdBgMVGtcKKWF3kQwnSuwQ9159kcwDPP5mxAiEAu3qVoU3air0PfHYLdkRWRV/W5PQYcN0fzGnxJXHLE2g="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gepard-1.9.3.tgz_1509213479586_0.714165473356843"}},"1.9.4":{"name":"gepard","description":"General purpose communications for distributed applications / Microservices / events, semaphores and messages for JavaScript, Java, Python and PHP","version":"1.9.4","homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","PHP","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"licenses":[{"type":"MIT","url":"https://github.com/gessinger-hj/gepard/LICENSE.md"}],"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"main":"main.js","engines":{"node":">= 0.10"},"dependencies":{"bonjour":"^3.2.0","clone":"^1.0.2","mime":">=1.3.4","mkdirp":"^0.5.1","nodejs-websocket":">=1.2","promise":">=7.0.3"},"devDependencies":{},"bin":{"gp.admin":"./bin/gp.admin","gp.lookup":"./bin/gp.lookup","gp.broker":"./bin/gp.broker","gp.broker.web":"./bin/gp.broker.web","gp.broker.no.web":"./bin/gp.broker","gp.shutdown":"./bin/gp.shutdown","gp.info":"./bin/gp.info","gp.http.simple":"./bin/gp.http.simple","gp.http.simple.is.running":"./bin/gp.http.simple.is.running","gp.http.simple.shutdown":"./bin/gp.http.simple.shutdown","gepard/gp.emit":"./xmp/Emitter.js","gepard/gp.sem":"./xmp/AsyncSemaphore.js","gepard/gp.listen":"./xmp/Listener.js","gepard/gp.lock":"./xmp/Locker.js","gp.client.tp":"./bin/gp.client.tp","gp.client.tplist":"./bin/gp.client.tplist","gp.client.tpoff":"./bin/gp.client.tpoff","gp.client.tpon":"./bin/gp.client.tpon","gp.tplist":"./bin/gp.tplist","gp.tpoff":"./bin/gp.tpoff","gp.tpon":"./bin/gp.tpon","gp.tp":"./bin/gp.tp"},"directories":{"test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","gitHead":"c8aafd7a78f674040bd2effaa7f25b8d8de90d87","_id":"gepard@1.9.4","_npmVersion":"5.3.0","_nodeVersion":"8.3.0","_npmUser":{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"},"dist":{"integrity":"sha512-hBI+6pP8QWdyTZ8+XX+mn16SM3U7W2lzQqUpwkg+Pki9C4JVDhFiu0ocqGJ9YqUjldTeOeb3ezwE9wAgPBoHVA==","shasum":"130013c0bfabc1d1f00cdcc939ab581518c53c81","tarball":"https://registry.npmjs.org/gepard/-/gepard-1.9.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClNRNDqFd7SM7RcahqLk1cHyiuV79fh4KWlR40DWiONwIgU4+b8RlC1KYzvgpJ1iRwa7FppqVnKbOUjCCEQF691Zk="}]},"maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/gepard-1.9.4.tgz_1509286146947_0.5614268321078271"}}},"readme":"# gepard\nGeneral purpose communication and synchronization layer for distributed applications / Microservices / events, semaphores, locks and messages for JavaScript, Java, Python and PHP\n\n<!-- MarkdownTOC autolink=\"true\" bracket=\"round\" depth=\"0\" style=\"unordered\" indent=\"    \" autoanchor=\"false\"  -->\n\n- [Overview](#overview)\n    - [Basic Client Creation](#basic-client-creation)\n    - [Most Simple Usage with emit and listen](#most-simple-usage-with-emit-and-listen)\n    - [Starting the Broker](#starting-the-broker)\n- [Install](#install)\n- [Getting Started](#getting-started)\n    - [Base](#base)\n    - [JavaScript](#javascript)\n    - [Java](#java)\n    - [Python](#python)\n    - [PHP](#php)\n- [Configuration](#configuration)\n- [What is new](#what-is-new)\n    - [Release 1-9-3 Webclient adapted to ReactJS \\(Mobile\\) and single page Apps](#release-1-9-3-webclient-adapted-to-reactjs-mobile-and-single-page-apps)\n    - [Release 1-9-2 Bugfix Release](#release-1-9-2-bugfix-release)\n    - [Release 1-9-0 New PHP Client implementation and published on Packagist](#release-1-9-0-new-php-client-implementation-and-published-on-packagist)\n    - [Release 1-8-4 Python Flavour now ist pubished on __pypi__](#release-1-8-4-python-flavour-now-ist-pubished-on-pypi)\n    - [Release 1-8-3 Bugfix Release](#release-1-8-3-bugfix-release)\n    - [Release 1-8-2 Enhance GPWebClient to use a Standard Webserver \\(nginx, ...\\)](#release-1-8-2-enhance-gpwebclient-to-use-a-standard-webserver-nginx-)\n    - [Release 1-8-1 Maintenance and Bugfix](#release-1-8-1-maintenance-and-bugfix)\n    - [Release 1-8-0 Java Connect Retry on First Connect](#release-1-8-0-java-connect-retry-on-first-connect)\n    - [Release 1-7-9 WebClient New Reconnect Mechanism](#release-1-7-9-webclient-new-reconnect-mechanism)\n    - [Release 1-7-8 WebClient Enhancement / Bugfix](#release-1-7-8-webclient-enhancement--bugfix)\n    - [Release 1-7-6 WebClient Enhancement](#release-1-7-6-webclient-enhancement)\n    - [Release 1-7-5 JavaScript Enhancements](#release-1-7-5-javascript-enhancements)\n    - [Release 1-7-0 mDNS Zeroconf for Python](#release-1-7-0-mdns-zeroconf-for-python)\n    - [Release 1-6-0 mDNS Zeroconf](#release-1-6-0-mdns-zeroconf)\n    - [Release 1-5-0 Channels](#release-1-5-0-channels)\n        - [Using Channels](#using-channels)\n            - [Event-listener](#event-listener)\n            - [Event-emitter](#event-emitter)\n        - [Channel Examples](#channel-examples)\n    - [Release 1-4-5 Registered Event-names may contain Wildcards \\(RegExp\\)](#release-1-4-5-registered-event-names-may-contain-wildcards-regexp)\n    - [Release 1-4-5 Simplified Handling of JSON Trees](#release-1-4-5-simplified-handling-of-json-trees)\n    - [Release 1-4-3 Logging](#release-1-4-3-logging)\n    - [Release 1-4-0 New Heartbeat Protocol to ensure the Availability of Connections](#release-1-4-0-new-heartbeat-protocol-to-ensure-the-availability-of-connections)\n    - [Release 1-3-3 New FileContainer class for Python, JavaScript and Java to simplify file-transfer.](#release-1-3-3-new-filecontainer-class-for-python-javascript-and-java-to-simplify-file-transfer)\n    - [Release 1-3-0 Let's talk about Python](#release-1-3-0-lets-talk-about-python)\n    - [Controlling Connections and Actions with a Hook](#controlling-connections-and-actions-with-a-hook)\n    - [Perfect load balanced message handling.](#perfect-load-balanced-message-handling)\n    - [Java bindings for all features:](#java-bindings-for-all-features)\n- [Use Cases](#use-cases)\n    - [Configuration Changes \\(Events\\)](#configuration-changes-events)\n    - [Concurrent editing of a Dataset \\(Semaphores\\)](#concurrent-editing-of-a-dataset-semaphores)\n    - [Synchronization of file processing \\(Locks\\)](#synchronization-of-file-processing-locks)\n    - [A Nice Exotic Mixture of Programming Languages](#a-nice-exotic-mixture-of-programming-languages)\n- [The Event Body](#the-event-body)\n- [Examples](#examples)\n    - [Examples Short](#examples-short)\n        - [Event listener](#event-listener-1)\n- [Technical Aspects of the Client](#technical-aspects-of-the-client)\n- [Found a bug? Help us fix it...](#found-a-bug-help-us-fix-it)\n- [https://github.com/gessinger-hj/gepard/blob/master/CHANGELOG.md](#httpsgithubcomgessinger-hjgepardblobmasterchangelogmd)\n- [Contributors](#contributors)\n- [Features](#features)\n- [Changelog](#changelog)\n\n<!-- /MarkdownTOC -->\n\n# Overview\nGepard is a system consisting of a broker and connected clients.\nThe communication is done via sockets or web-sockets.\nThe sockets are always open so that any partner of a connection may be informed if this connection ended.\nThis is very useful in the area of semaphores and locks.\n<br/>\n\n## Basic Client Creation\nUp to now a client is a standalone JavaScript program, a JavaScript app inside a browser, a Java program, a Python program or a PHP program.\n\nA client uses only one socket for all interactions with the broker. Thus a program needs only 1 client for all features.\nIn order to use only 1 Client instance it is suggested to use the static method\n\n* JavaScript:\n\n```js\ngepard = require  ( \"gepard\" )  :\nvar client = gepard.getClient ( [ port [, host ] ] ) ;\n```\n\n* Java:\n\n```java\nimport org.gessinger.gepard.Client ;\nClient client = Client.getInstance ( [ port [, host ] ] ) ;\n\n```\n\n* Python:\n\n```py\nimport gepard\nclient = gepard.Client.getInstance ( [ port [, host ] ] )\n\n```\n* PHP:\n```php\n<?php\nnamespace Gepard;\nrequire ( 'vendor/autoload.php' );\nuse Gepard;\n$client = Client::getInstance ( [ port [, host ] ] ) ;\n```\n\n## Most Simple Usage with emit and listen\n\n* JavaScript:\n```js\ngepard.getClient().emit ( \"ALARM\", { write: function() { this.end() } } ) ;\n\ngepard.getClient().on ( \"ALARM\", (e) => { console.log(e) } ) ;\n```\n\n* Java:\n```java\nClient.getInstance().emit ( \"ALARM\" ) ;\n\nClient.getInstance().on ( new String[] { \"ALARM\", \"BLARM\" }, (e) -> { System.out.println(e);} ) ;\n```\n\n* Python:\n```py\ngepard.Client.getInstance().emit ( \"ALARM\" )\n\ndef on_ABLARM ( event ):\n\tprint ( event )\ngepard.Client.getInstance().on ( [\"ALARM\",\"BLARM\"], on_ABLARM )\n```\n\n* PHP:\n```php\nClient::getInstance()->emit(\"ALARM\") ;\n\nClient::getInstance()->on ( [\"ALARM\",\"BLARM\"], function($e) { echo($e); } ) ;\n\n```\n\n## Starting the Broker\n\nThe broker can be instantiated from a JavaScript program but the most common and simplest way to use it is to start it detached as a daemon.\n\nThe appropriate command is:\n\n```bash\nnode_modules/.bin/gp.broker.web\n```\nThis starts the Broker and the corresponding web-socket-proxy\n<br/>\nIf you want to start the broker alone:\n\n```bash\nnode_modules/.bin/gp.broker\n```\n\nThere is a separate program for administration purposes:\n```bash\nnode_modules/.bin/gp.info\n```\nor\n\n```bash\nnode_modules/.bin/gp.admin [ --help ]\n```\nThere is a special command for service-lookup:\n```bash\nnode_modules/.bin/gp.lookup --gepard.zeronconf.type=<type-name>\ne.g.:\nnode_modules/.bin/gp.lookup --gepard.zeronconf.type=test-gepard\n```\nThis command lists all service-instances with the service-type __test-gepard__ in the local subnet.\n\n# Install\n\n__npm install gepard__\n\nor the newest stable but development version:\n\nnpm install git+https://github.com/gessinger-hj/gepard\n\n# Getting Started\n\nHere are some kind of \"Hello World\" examples.\n\nAll commands are in the directory: __node_modules/.bin__ or __node_modules/.bin/gepard__\n\nUp to now the JavaScript, the Python and the Java classes are implemented.\n<br/>\nThe examples show the nice and easy interaction between programs written in these different languages.\n\n## Base\n1.  __gp.broker.web<br/>__\n\t\tStart the gepard broker with websocket proxy\n\n1.  __gp.shutdown<br/>__\n\t\tSend a __shutdown__ event to all clients and stop the broker\n\n1.  __gp.info<br/>__\n\t\tShow basic information from the broker\n\n## JavaScript\n\n1.  __gp.listen --name=hello<br/>__\n\t\tStart a listener for events named __hello__.\n\t\tIf you want to listen to all events with name starting with hello use a wildcard:\n\t\tgp.listen \"--name=hello__*__\"\n\n1.  __gp.sem__<br/>\n\t\tAcquire a semaphore\n\n1.  __gp.lock__<br/>\n\t\tAcquire a lock\n\n1.  If you want to play with the web-client implementation use the appropriate files in:\n\t\t__node_modules/gepard/xmp/webclient__\n\t\t\nTo simplyfy this the command\n```bash\ngp.http.simple [options]\n```\n\nis supplied starting a simple js webserver detached.\nOptions are:\n\n* --port=<port&gt;, default=8888\n* --root=<web-root&gt;, default=node_modules/gepard/xmp/webclient\n* --index=<index-file&gt;, default=index.html\n\nStart your browser and go to: __localhost:8888__\n\n1.  __gp.http.simple.shutdown__<br/>\n\t\tStop the simple webserver.\n\n1.  __gp.http.simple.is.running__<br/>\n\t\tCheck if the simple webserver is running.\n\n<br/>\nIn order to try out the examples goto node_modules/gepard/xmp.\n<br/>\nThe following examples exist:\n\n* Listener.js\n* FullArmedListener.js\n* Emitter.js\n* EmitterWithBody.js\n* EmitterWithStatusInfo.js\n* Requester.js\n* Responder.js\n* Locker.js\n* AsyncSemaphore.js\n\n## Java\n\nIn order to try out the examples goto node_modules/gepard/java.\nAll examples are included in lib/Gepard.jar.\nWith the following command all examples can be executed:\n\n```bash\njava [-D<name>=<value>] -cp lib/Gepard.jar:lib/gson-2.3.1.jar org/gessinger/gepard/xmp/Listener\n```\n\n__Listener__ may be replaced by:\n\n* Listener\n* Emitter\n* EmitterWithBody\n* EmitterWithStatusInfo\n* Requester\n* Responder\n* Locker\n* AsyncSemaphore\n* BlockingSemaphore\n\nThe class-version in the existing Gepard.jar is 1.6, so you need to have at least java 1.6 installed.\nThere is an ant file to build your own jar.\n\nOptions, e.g. for the event-name must be set in the common Java format: -Dname=hello\n\n## Python\n\nIn order to try out the examples goto node_modules/gepard/python/xmp.\n\nThe following examples exist:\n\n* Listener.py\n* FullArmedListener.py\n* Emitter.py\n* EmitterWithBody.py\n* EmitterWithStatusInfo.py\n* Requester.py\n* Responder.py\n* Locker.py\n* AsyncSemaphore.py\n* BlockingSemaphore.py\n\n## PHP\n\nThe following examples exist:\n\n* Listener.php\n* Emitter.php\n* Requester.php\n* Responder.php\n\nIn order to try out the examples goto installation directory and call\n\n```bash\nphp vendor/gepard/gepard-php/xmp/Listener.php\n```\nThe other examples can be executed accordingly.\n\n# Configuration\n\nThe communication is based on sockets. Thus only the port and optional the host must be specified to use Gepard.\nThe defaults are:\n\n* port=17501\n* host=localhost\n* web-socket port=17502\n\nThe port, host and logging directory can be set either by\nsupplying these items\n\n1. within creating an instance of Client or Broker in your code.\n\n2. as startup arguments of your program as:\n\t- -Dgepard.port=<port&gt;\n\t- -Dgepard.host=<host&gt;\n\t- -Dgepard.log=<log-dir&gt;\n\n3. with environmant variables of the form:\n\t- export ( or set ) GEPARD_PORT=<port&gt;\n\t- export ( or set ) GEPARD_HOST=<host&gt;\n\t- export ( or set ) GEPARD_LOG=<log-dir&gt;\n\n# What is new\n\n## Release 1-9-3 Webclient adapted to ReactJS (Mobile) and single page Apps\n\nThe JavaScript Web-client is separated from gepard core to use it with mobile applications, standard single page\nweb-applications and standalone environments like WebKit / Electron.\nFor more information See [npm gebard-web](https://www.npmjs.com/package/gepard-web).\n\nThe Java version of the gepard-client (Gepard.jar and Google's gson-2.3.1.jar) can be used seamlessly in any\nAndroid environment. No special wrapper-classes should be created because experience shows that nothing can be simpler\nthan the gepard-api used directly.\n\n## Release 1-9-2 Bugfix Release\n\nSee [change log details](https://github.com/gessinger-hj/gepard/blob/master/CHANGELOG.md)\n\n## Release 1-9-0 New PHP Client implementation and published on Packagist\nIn this release a basic featured PHP client is included. The implementation is __pure generic PHP code__.\nThe features are:\n\n* emit event\n* listen to events\n* request / result ( messages )\n\nDue to lack of multi-threading semaphores and locks are not implemented.\n\nThe new PHP client can be easily installed with the __composer__.\n\nPackage and installation details can be found at [packagist](https://packagist.org/packages/gepard/gepard-php)\n\n## Release 1-8-4 Python Flavour now ist pubished on __pypi__\n\nThe python client now can be easily installed with the command: \n\n```bash\npip install gepard-python\n```\n\n## Release 1-8-3 Bugfix Release\n\nSee [change log details](https://github.com/gessinger-hj/gepard/blob/master/CHANGELOG.md)\n\n## Release 1-8-2 Enhance GPWebClient to use a Standard Webserver (nginx, ...)\nThe GPWebClient now accepts a full qualified URL as connection attributes.\nThis is useful in case a standard web-server is used as a proxy.\n\nDetails [see](#how-to-use-a-standard-webserver-as-a-proxy-for-the-websocketeventproxy)\n\n## Release 1-8-1 Maintenance and Bugfix\nMaintenance release. [Details](https://github.com/gessinger-hj/gepard/blob/master/CHANGELOG.md)\n\n## Release 1-8-0 Java Connect Retry on First Connect\nIf re-connect is requested and there is no reachable Broker then the Java client tries to\nconnect every 5 seconds to establish a valid connection.\nThis is the same behaviour as the JavaScript client and the WebClient used in a browser.\n\n## Release 1-7-9 WebClient New Reconnect Mechanism\n\nIf re-connect is requested with\n\nclient.setReconnect ( true )\n\nthe client acts as follows:\n\n1.\tIf a running WebSocketEventProxy accepts a connection: connect.\n1.\tIf ther is no running WebSocketEventProxy try to connect every 5 seconds forever.\n\nIf a re-connect is set but the client should exit if there is no running WebSocketEventProxy then\nan error listener can be registered. In this listener-function the re-connect setting can be\nreset.\n\nExample:\n\n```js\n\t\tc.on('error', function(e)\n\t\t{\n\t\t\tc.setReconnect ( false ) ;\n\t\t});\n```\nIn addition if a WebSocket-connection dies a re-connect is tried every 5 seconds.\nIn this case all event-listener are registered again.\n\n## Release 1-7-8 WebClient Enhancement / Bugfix\n- GPWebClient: protected event-names for method on ( name, callback):\n  \"open\", \"close\", \"error\", \"shutdown\", \"end\"\n- WebSocket: use protocol wss only for https:\n- GPWebClient: new method: close().\n\tCan be used with the browser's event __onbeforeunload__ to close a connection.\n\n## Release 1-7-6 WebClient Enhancement\n\nEnable GPWebClient to optional use another target domain (host).\nMainly the method gepard.getWebClient ( port ) now accepts an optional doman (host) as second parameter like:\ngepard.getWebClient ( 12345, \"my.domain.com\" ) ;\n\n## Release 1-7-5 JavaScript Enhancements\n\nIf re-connect is requested with\n\n1.\tEnvironment: export GEPARD_RECONNECT=true\n1.\tOption as argument: --gepard.reconnect=true\n1.\tclient.setReconnect ( true )\n\nthe client acts as follows:\n\n1.\tIf a running Broker accepts a connection: connect.\n1.\tIf ther is no running Broker try to connect every 5 seconds forever.\n\nIf a re-connect is set but the client should exit if there is no running Broker then\nan error listener can be registered. In this listener-function the re-connect setting can be\nreset.\nExample:\n\n```js\n\t\tc.on('error', function(e)\n\t\t{\n\t\t\tc.setReconnect ( false ) ;\n\t\t});\n```\n\n## Release 1-7-0 mDNS Zeroconf for Python\n\nThis release introduces the __zeroconf__ mechanism for __Python__.\nThe mechanism is set up as close as possible to the JavaScript version.\nBefore you can use this mechanism the __python-module zeroconf must be installed__.\nThis is done with the command: __pip install zeroconf__. On OSX and Linux/Unix this is a trivial task.\nOn Windows it is more complicated so you have to read the installation documentation for this module carefully.\n\nZero-configuration networking (zeroconf) is a set of technologies that automatically creates a usable computer network based on the Internet Protocol Suite (TCP/IP) when computers or network peripherals are interconnected. It does not require manual operator intervention or special configuration servers.\nZeroconf mDNS plus DNS-SD: that is, multicast DNS plus DNS service discovery.\nThis technology is perfect to enhance the gepard based app communications.\nWith Gepard it is such easy:\n\n1.\t__gp.broker --gepard.zeroconf=test-gepard,0__\n<br/>type: __test-gepard__\n<br/>socket: __0__ (zero) means: any free port of the host\n\n1.\t__python Listener.py --gepard.zeroconf.type=test-gepard --gepard.reconnect=true__\n<br/>Finds any Broker in the subnet which advertizes the service-type __test-gepard__\n<br/>If currently no service is available waits for service coming up.\n<br/>If service goes down a new lookup is done and all listeners are re-registered to the new found Broker.\n\nSee details in the chapter [Zeroconf Usage in Detail](#zeroconf-usage-in-detail)\n\n\n## Release 1-6-0 mDNS Zeroconf\n\nZero-configuration networking (zeroconf) is a set of technologies that automatically creates a usable computer network based on the Internet Protocol Suite (TCP/IP) when computers or network peripherals are interconnected. It does not require manual operator intervention or special configuration servers.\nZeroconf mDNS plus DNS-SD: that is, multicast DNS plus DNS service discovery.\nThis technology is perfect to enhance the gepard based app communications.\nWith Gepard it is such easy:\n\n1.\t__gp.broker --gepard.zeroconf=test-gepard,__\n<br/>type: __test-gepard__\n<br/>socket: __0__ (zero) means: any free port of the host\n\n1.\t__node xmp/Listener.js --gepard.zeroconf.type=test-gepard --gepard.reconnect=true__\n<br/>Finds any Broker in the subnet which advertizes the service-type __test-gepard__\n<br/>If currently no service is available waits for service coming up.\n<br/>If service goes down a new lookup is done and all listeners are re-registered to the new found Broker.\n\nSee details in the chapter [Zeroconf Usage in Detail](#zeroconf-usage-in-detail)\n\n## Release 1-5-0 Channels\n\nThis release introduces __Channels__ as a meta-layer to organize different realms in a very simple and effective manner.\n<br/>\nEach listener-client can subscribe for event-names in one or more channel(s).\n<br/>\nAn emitter- / requester-client can emit events containing a channel identifier.\nThe Broker filters the listening-clients with this channel and sends the event only to clients on this channel.\n\n\n### Using Channels\n\n#### Event-listener\n\nThere are 3 different possibilities to subscribe to one or more channels:\n\n1.\tThe method __client.setChannel ( <channel-name> )__\n\t<br/>The &lt;channel-name> is of the form: id{,id-2, ... id-n}\n\t<br/>\n\tExample: client.setChannel ( \"A,B,C\" )\n\t<br/>\n\tAll events which are not emitted with one of these channel-ids are filtered-out by the broker.\n\t<br/>\n\tIf a client subscribes for any event-name all name-matching and channel-matching events are propagated to the\n\tregistered listening-function.\n\n2.\tRegardless of the client's channel-membership a shortcut for registering a listener for a specific channel is:\n\t<br/>\n\tclient.on ( &lt;channel-name&gt;**::**&lt;event-name&gt;, &lt;callback> )\n\t<br/>\n\tAs seen the channel-name and the event-name are concatenated with to colons (__::__).\n\t<br/>\n\tIn this case the broker matches the given channel only in combination with the given event-name.\n\t<br/>\n\tExample: client.on ( \"A::alarm\" )\n\n3.\tSimple external channel assignment:\n\t-\tStart the appropriate application with the option\n\t<br/>\n\t\t__--gepard.channel=&lt;channel-name>__\n\t<br/>\n\tor\n\t-\tSet the environment-variable in the scope of the process:\n\t<br/>\n\t__export GEPARD_CHANNEL=&lt;channel-name>__\n\n#### Event-emitter\n\nThere are 2 different possibilities to emit an event on a channel:\n\n1.\tThe method __client.setChannel ( <channel-name> )__\n\tThe &lt;channel-name> is of the form: id{,id-2, ... id-n}\n\t<br/>\n\tThe event can only be sent on one channel the so-called main-channel.\n\t<br/>\n\tBy default the main-channel is the first in the comma-list of channel-names.\n\tThis may be changed by prefixing the appropriate channel-name with an asterisk (__*__)\n\t<br/>\n\tExample: client.setChannel ( \"A,B,<b>*</b>C\" )\n\t<br/>\n\tWith this definition the channel __C__ is the main-channel.\n\n2.\tRegardless of the client's channel-membership a shortcut for emitting an event on another channel is:\n\t<br/>\n\tclient.emit ( &lt;channel-name>__::__&lt;event-name> )\n\t<br/>\n\tExample: client.emit ( \"A**::**alarm\" )\n\n3.\tSimple external channel assignment:\n\t-\tStart the appropriate application with the option\n\t<br/>\n\t\t__--gepard.channel=&lt;channel-name>__\n\t<br/>\n\tor\n\t-\tSet the environment-variable in the scope of the process:\n\t<br/>\n\t__export GEPARD_CHANNEL=&lt;channel-name>__\n\n### Channel Examples\n\nSuppose you need access to 2 databases named DB-A and DB-B with different content.\n<br/>\nIt is easy to use the identical client-programs to connect with appropriate credentials and parameters.\n<br/>\nThe 2 micro-services register themselfes with\n-\tclient.setChannel ( \"DB-A\" )\n\t<br/>\n\tclient.on ( \"db-request\" )\n\n\tand\n\n-\tclient.setChannel ( \"DB-B\" )\n\t<br/>\n\tclient.on ( \"db-request\" )\n\nA interested client only needs to know the appropriate channel and requests\n-\tclient.request ( \"DB-A::db-request\", callback )\n\n\tor\n\n-\tclient.request ( \"DB-B::db-request\", callback )\n\n## Release 1-4-5 Registered Event-names may contain Wildcards (RegExp)\n\nUp to now an event-handler is registered with one or more exact event-names, e.g.\n\n```js\nclient.on ( \"config-changed\", <function-reference> )\n```\n\nNow it is possible to use wildcard pattern for registering a listener, e.g.\n\n```js\nclient.on ( \"*-changed\", <function-reference> )\n```\nIn this case all events matching the regular expression __.*-changed__ are routed to this listener.\n\nIn general a regular-expression pattern is derived from the given string if it containes some indicators.\n\n1. an __*__ (asterisk) or a __?__ (question-mark)\n\t<br/>\n\tBefore the regular-expression is compiled the astrisk is replaced by a __.*__ and the __?__ is replced by a __.__ (dot)\n1. at least one __.*__\n\t<br/>\n\tThe whole string is used as is to compile the appropriate regular-expression.\n1. the string starts and ends with a slash: __\"/A.*/\"__\n\t<br/>\n\tThe string between the slashes is used as is to compile the appropriate regular-expression.\n\n## Release 1-4-5 Simplified Handling of JSON Trees\n\nCreating and editing JSON objects in Python and Java is a little bit unhandy. The class JSAcc in Python, JavaScript and Java simplifies\nthe handling of these objects.\n<br/>\nThe main methods of this class are:\n\n- jsacc.add ( &lt;path>, object )\n- jsacc.get ( &lt;path>, [ &lt;default-return-object> ] )\n- jsacc.remove ( &lt;path> )\n\nThe &lt;path> is a slash delimited combination of string-keys in the appropriate nodes of the JSON-tree.\n\nExample:\n\n- Python:\n\n```python\ne = Event ( \"XXX\" )\njsacc = JSAcc ( e.getBody() )\n\ntype = jsacc.get ( \"request/header/type\" )\njsacc.remove ( \"request\" )\njsacc.add ( \"result/header/status\", True )\n```\n\n- JavaScript:\n\n```js\nvar e = new Event ( \"XXX\" ) ;\nvar jsacc = new JSAcc ( e.getBody() ) ;\n\nvar type = jsacc.get ( \"request/header/type\" ) ;\njsacc.remove ( \"request\" ) ;\njsacc.add ( \"result/header/status\", true ) ;\n```\n- Java:\n\n```java\nEvent e = new Event ( \"XXX\" ) ;\nJSAcc jsacc = new JSAcc ( e.getBody() ) ;\n\nString type = (String) jsacc.get ( \"request/header/type\" ) ;\njsacc.remove ( \"request\" ) ;\njsacc.add ( \"result/header/status\", true ) ;\n```\n\nPath-elements which do not exist are created if needed.\n\n## Release 1-4-3 Logging\n\n- Client Logging into central Log-File on Broker side by calling the method\n\t<br/>\n\t__client.log ( {object} o )__\n\t<br/>\n\tThe above {object} is converted to a user-friendly readable string, sent to the Broker which logs it to the default log-file.\n\t<br/>\n\tFor all exception type objects an appropriate stack-trace is generated. \n\t<br/>\n\n\tExamples:\n\t* JavaScript: [gepard/xmp/XmpLog.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/XmpLog.js)\n\t* Java: [gepard/java/org.gessinger/gepard/xmp/XmpLog.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/XmpLog.java)\n\t* Python: [XmpLog.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/XmpLog.py)\n\n\tThis function can be rejected by overwriting the system method in the ConnectionHook class.\n\t<br/>\n\tEvent.getName() is 'system'\n\t<br/>\n\tEvent.getType() is 'log'\n\n- Logging with the concept of trace-points for Broker in/out and client in/out.\n\t<br/>\n\tThe TracePoint logging features is configurable at run-time.\n\t<br/>\n\tIn addition to the built-in TracePoints __EVENT_IN__ and __EVENT_OUT__ on the client-side application-specific trace-points can be easily defined and used:\n\t<br/>\n\nJavaScript:\n\n```js\n\tvar tracePoint = client.registerTracePoint ( \"MY_TRACE_POINT\" ) ;\n\ttracePoint.log ( \"Action ended\" ) ;\n```\nPython:\n\n```python\n\ttracePoint = client.registerTracePoint ( \"MY_TRACE_POINT\" )\n\ttracePoint.log ( \"Action ended\" )\n```\nJava:\n\n```java\n\tTracePoint tp = client.registerTracePoint ( \"MY_TRACE_POINT\" ) ;\n\ttracePoint.log ( \"Action ended\" ) ;\n```\nEach TracePoint can be activated and deactivated at runtime.\nThis function can be rejected by overwriting the __ConnectionHook.prototype.system(connection,event)__ method in the ConnectionHook class.\nEvent.getName() is 'system'\nEvent.getType() is 'log'\n\n\n## Release 1-4-0 New Heartbeat Protocol to ensure the Availability of Connections\n\nGepard is based on fast communication by means of always-open sockets. Therefore it is crucial to monitor these connections.\nThis is achieved by a mechanism which exchanges packets between the broker and all connected clients in fixed time intervals defined\nby the broker. This interval is transmitted to clients as they connect.\n\nThe broker sends a __PING__ message to the connected clients in each interval to which all clients are expected to respond with a __PONG__\nmessage within the three next intervals. If no such response is received by the end of the third interval, the broker closes the connection-socket.\n\nOn the other end, after dispatching a __PONG__ message, the client waits for the next __PING__ from the broker to arrive within 3 intervals.\nIn case the subsequent __PING__ is not received, the client closes the connection socket and emits a __\"disconnect\"__ event to signal the status to the application.\n\nIf the client is configured to re-connect, it will try to establish a new connection to the broker in a pre-defined interval.\nOn success, the client will emit a __\"reconnect\"__ event to the application. All gepard-event-listeners which had been registered at the time of disconnect will then automatically be registered\nwith the broker again.\n\nExample time-out conditions are:\n\n- Broker restart after maintenance\n- Backup time of a virtual machine\n- Restart of a firewall\n\n[Parameter, details and example](#heartbeat-and-reconnection-capability-parameterization)\n\n## Release 1-3-3 New FileContainer class for Python, JavaScript and Java to simplify file-transfer.\n\nAn instance of the __FileContainer__ class may be inserted at any place inside the body of an Event.\n<br/>\nIf the client runs on the same machine as the broker only the full path-name of the file will be transferred.\n<br/>\nIf the broker runs on a different machine the content of the file is read in as a byte-array and transferred as payload to the broker.\n<br/>\nIf the broker detects a target on a different machine the file is read in and put into the event's body before sending the data.\n<br/>\nThis is done on a per connection basis.\n<br/>\n[See details](#file-transfer-with-the-filecontainer-class)\n\n## Release 1-3-0 Let's talk about Python\n\nIn this release a full featured Python client is included. The implementation is __pure generic Python code__.\nThe features are:\n\n* emit event\n* listen to events\n* request / result ( messages )\n* semaphores ( synchronously / asynchronously )\n* locks\n\n## Controlling Connections and Actions with a Hook\n\nIn order to control connections and actions a default hook class is provided:\n[ConnectionHook](https://github.com/gessinger-hj/gepard/blob/master/src/ConnectionHook.js)\n\nThis class contains several methods which are called in appropriate cases:\n\n```js\nconnect ( connection )\nshutdown ( connection, event )\ngetInfoRequest ( connection, event )\naddEventListener ( connection, eventNameList )\nsendEvent ( connection, eventName )\nlockResource ( connection, resourceId )\nacquireSemaphore ( connection, resourceId )\nclientAction ( connection, resourceId )\nsystem ( connection, event )\n```\nEach of these methods must return an answer wether to allow or reject the corresponding action.\n<br/>\nThe answer must be either a boolean value or a __Thenable__ which means a __Promise__ object of any kind.\n<br/>\nThe default for shutdown is to return a __false__ value if the incoming connection is not from localhost.\nIn all other cases the default returns a __true__\n<br/>\nThe parameter can be used to test the allowance in a deeper way.\n<br/>\nFor example using a Promise for shutdown enables an asynchronous check with help of a database configuration.\n<br/>\nTo configure this hook a __subclass__ of __ConnectionHook__ must be implemented and defined as user-hook in an JSON configuration file:\n\n```json\n{\n\t\"connectionHook\": \"<path-to-javascript-code>/XmpConnectionHook\"\n}\n```\nThis hook file is __required__ with the start of the broker.\n<br/>\nIn this case the command to start the broker is:\n<br/>\n__<pre>gp.broker --config=&lt;full-config-file-name&gt;</pre>__\n\nAn example for a user defined hook is the [XmpConnectionHook.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/XmpConnectionHook.js) file:\n\n```js\nvar util = require ( \"util\" ) ;\nvar ConnectionHook = require ( \"gepard\" ).ConnectionHook ;\nvar XmpConnectionHook = function()\n{\n\tXmpConnectionHook.super_.call ( this ) ;\n};\nutil.inherits ( XmpConnectionHook, ConnectionHook ) ;\nXmpConnectionHook.prototype.connect = function ( connection )\n{\n\tconsole.log ( \"connection.getRemoteAddress()=\" + connection.getRemoteAddress() ) ;\n\treturn true ;\n};\nmodule.exports = XmpConnectionHook ;\n```\nIf you prefer to start the broker from within your own JavaScript-program the configuration object can be set like:\n```js\n\tvar b = new Broker() ;\n\tb.setConfig ( <config-object or path to config-json-file> ) ;\n\tb.listen() ;\n```\nThe parameter __connection__ in the above method-signatures is an internal used object with mainly the public useful methods:\n\n1.  connection.isLocalHost()\n1.  connection.getRemoteAddress()\n1.  connection.getHostName()\n1.  connection.getLanguage()\n1.  connection.getApplicationName()\n1.  connection.getApplication()\n1.  connection.getId()\n\n## Perfect load balanced message handling.\n\nThe use-case for request/respond is enhanced to a perfect load balancing.\n<br/>\nSuppose there are __n__ message-listeners offering the same service-name ( event-name )\n<br/>\n__m__ messages come in to the broker with __m__ = __n + 1__\n<br/>\nThe following is done:\n\n1.  the first __n__ messages are sent to the __n__ free listener for processing the request.\n1.  the __m-th__ message is stored inside the broker waiting for any of the listeners sending back the response.\n1.  after receiving the first message-response from any listener the waiting __m-th + 1__ message is sent to the now free listener.\n\nAs long as a sent message is not returned the Broker stores it in relation to the worker connection.\nIf this connection dies the stored message is sent back to the originator marked with the fail state and appropriate text.\nThe status can be tested with event.isBad() which returns true or false.\n\n## Java bindings for all features:\n\n* emit event\n* listen to events\n* request / result ( messages )\n* semaphores\n* locks\n\nWith this it is very easy to communicate or synchronize between JavaScript programs or webapps in a browser with a Java server or Java program.\n\nThe conversion from JSON to Java and vice versa is done with the Gson Google library for Java.\n\nIf you need special serialization / deserialization you may set the appropriate Gson instance in the Event-class statically with the method Event.setGson() ;\n\nThe Event-class may convert the json to map Java's byte[]-array to NodeJS's Buffer and vice versa.\nThis can be set statically by Event.mapByteArrayToJavaScriptBuffer ( boolean state ).\nThe default is true.\n\n\n# Use Cases\n\n## Configuration Changes (Events)\n\nSuppose you have 1 program that changes configuration-entries in a database-table.\nAfter the new entries are committed the program sends an event with:\n\n```js\nclient.emit ( \"CONFIG-CHANGE\" ) ;\n```\n\nSeveral clients do their work based on these data.<br/>\n\nAll clients including web-clients setup a listener for example with\n\n```js\nclient.on ( \"CONFIG-CHANGE\", function callback(e) {} ) ;\n```\n\n## Concurrent editing of a Dataset (Semaphores)\nTwo users with their web browser want to edit the same user-data in a database.\nIn this case a Semaphore is very useful.\n\n<br/>\nBoth do\n\n```js\ngepard.port = 17502 ;\nvar sem = new gepard.Semaphore ( \"user:4711\" ) ;\nthis.sem.acquire ( function sem_callback ( err )\n{\n\t// we are owner\n\tfetch data, edit and save\n\n\tthen:\n\n\tthis.release() ; // with this statement the second user's browser app is callbacked\n}) ;\n```\n\n## Synchronization of file processing (Locks)\n\nSuppose there are many files in a directory waiting to be processed.\n<br/>\nLet's name the directory: foo/bar/input\n<br/>\nIn order to speed up the overall processing several identical programs should work together.\n<br/>\nIn this case Locks are very useful.\nThe following should be done:\n\n```js\nvar fs     = require ( \"fs\" ) ;\nvar gepard = require ( \"gepard\" ) ;\nvar lock ;\n\nvar array = fs.readdirSync ( \"foo/bar/input\" ) ;\nfor ( var i = 0 ; i < array.length ; i++ )\n{\n\tlock = new gepard.Lock ( array[i], function()\n\t{\n\t\ttry\n\t\t{\n\t\t\tif ( ! this.isOwner() ) return ;\n\t\t\t.............. process file ................\n\t\t}\n\t\tfinally\n\t\t{\n\t\t\tthis.release() ;\n\t\t}\n\t} ) ;\n}\n```\n## A Nice Exotic Mixture of Programming Languages\n\nSuppose the following: There are a couple of JavaScript and Python programs to interact with a database. The database changes.\nAnd it would be nice to not change modules for database access.\n<br/>\nEspecially if the new database is an Oracle database. Perhaps on Linux.\n<br/>\nEverybody who had ever tried to install the appropriate NodeJS or Python module ended up in a mess of build, configuration and installation problems.\n<br/>\nOne of the nicest Java features is the total abstraction of the database handling via the JDBC api.\n<br/>\nIt is clear what to do: Use a Java Gepard client connected to a database and execute all simple REST kind of actions\nvia request/respond on the basis of Gepard.\n<br/>\nIn this combination changing a database vendor is only a 10 second job changing the connection url and restart the Java client. Ok: another 5 seconds. But that's it.\n<br/>\nNo compilation, no installation no problems.\n\n# The Event Body\nThis member of an event is the holder for all payload-data. In all languages this is a hashtable with the restriction that the key must be\nof type string.\n<br/>\n* Java: __Map&lt;String,Object&gt;__\n* JavaScript: __{}__ or in long form: __Object__\n* Python: __{}__ which is in fact an object of type __dict__\n* PHP: __[]__ which is in fact an object of type __Array__\n\nSetter and getter are the appropriate methods __Event.putValue(name,value)__ and __Event.getValue(name)__.\n<br/>\n__value__ is either a scalar type, a hashtable with strings as keys and valid object types, a list containing valid object types or a a combination of all valid types.\nThus a set of data like a tree can be used.\n<br/>\n__Note: Gepard's data exchange mechanism is NOT intended to transport serialized objects between clients.__\n<br/>\nThe valid types are:\n* scalar type objects: string, int, double, number\n* array type objects:\n\t- Array ( [] )\n\t- List ( [] )\n* hashtable type objects:\n\t- Java: Map&lt;String,Object&gt;\n\t- Python: dict ( {} )\n\t- JavaScript: Object ( {} )\n\nThere are 2 type of objects which are treated by gepard in a special way:\n* dates\n\t- JavaScript: Date\n\t- Java: Date\n\t- Python: datetime.datetime\n\t- PHP: Date\n* bytes\n\t- JavaScript: Buffer\n\t- Java: byte[]\n\t- Python: bytearray, bytes ( bytes should not be used to send because in python < 3 bytes is a subclass of str, typeof byte == 'str'\n\t\tand thus cannot be detected by this mechanism)\n\nIn these cases an object is transferred from a generic class of a sender to the generic class of the receiver which means it is reconstructed in the target programming language.\n<br/>\n__Note on Python:__\n<br/>\nThe built-in date class in python is not able to parse or format ISO date strings. In order to enable full interoperability related to dates\nthe gapard module tries to import the well known __dateutils__ module. This in turn imports the __six__ module. If these modules are in\npython's module path the generic python date class can be used.\n<br/>\nDetails in:\n\n* JavaScript: [gepard/xmp/EmitterWithBody.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/EmitterWithBody.js)\n* Java: [gepard/java/org.gessinger/gepard/xmp/EmitterWithBody.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/EmitterWithBody.java)\n* Python: [EmitterWithBody.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/EmitterWithBody.py)\n\n# Examples\n\nReady to use examples for JavaScript are located in __.../gepard/xmp__\n<br/>\nReady to use examples for Java are located in __.../gepard/gepard/java/org.gessinger/gepard/xmp__ and compiled in\n__.../gepard/java/lib/Gepard.jar__\n<br/>\nReady to use examples for Python are located in __.../gepard/python/xmp__\n\n## Examples Short\n\n### Event listener\n\nAdding a event-listener with the __on()__ method may be done with a single event-name or a list of event-names.\n\n__JavaScript__: client.on ( \"ALARM\", callback )\n\t <br/> or client.on ( [ \"ALARM\", \"BLARM\" ], callback )\n\n__Java__: client.on ( \"ALARM\", callback )\n <br/>or client.on ( new String[] { \"ALARM\", \"BLARM\" }, callback )\n\n__Python__: client.on ( \"ALARM\", callback )\n<br/>or client.on ( [ \"ALARM\", \"BLARM\" ], callback )\n\n__PHP__: client->on ( \"ALARM\", callback )\n<br/>or client->on ( [ \"ALARM\", \"BLARM\" ], callback )\n\nThe callback will be called with an Event object of the appropriate name ( e.getName() or $e->getName() )\n\n\nApplication\n\n```js\n\tvar gepard = require ( \"gepard\" ) ;\n\tvar client = gepard.getClient() ;\n```\nBrowser\n\n```js\n\tvar client = gepard.getWebClient ( 17502[, host] ) ;\n```\n\nCode\n\n```js\nclient.on ( \"ALARM\", function event_listener_callback(e)\n{\n\tconsole.log ( e.toString() ) ;\n});\n```\n\nJava\n\n```java\nimport org.gessinger.gepard.Client ;\nimport org.gessinger.gepard.EventListener ;\nimport org.gessinger.gepard.Event ;\nClient client = Client.getInstance() ;\n\nclient.on ( \"ALARM\", new EventListener()\n{\n\tpublic void event ( Event e )\n\t{\n\t\tSystem.out.println ( e ) ;\n\t}\n} ) ;\n```\n\nPython\n\n```python\nimport gepard\nclient = gepard.Client.getInstance()\n\ndef on_ABLARM ( event ):\n\tprint ( \"on_ALARM\" )\n\tprint ( event )\n\nclient.on ( \"ALARM\", on_ABLARM )\n```\n\nPHP\n\n```php\nnamespace Gepard;\nrequire ( 'vendor/autoload.php' );\nuse Gepard;\n$client = Client::getInstance();\n$client->on ( 'ALARM', function($event) {\n\techo ( $event ) ;\n}) ;\n\n``\n\nDetails in:\n\n* JavaScript: [gepard/xmp/Listener.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/Listener.js)\n* Java: [gepard/java/org.gessinger/gepard/xmp/Listener.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/Listener.java)\n* Python: [Listener.py](https://github.com/gessinger-hj/gepard-python/blob/master/python/xmp/Listener.py)\n* PHP: [Listener.php](https://github.com/gessinger-hj/gepard-php/blob/master/xmp/Listener.php)\n\n### Event Emitter\n\nApplication\n\n```js\nvar gepard = require ( \"gepard\" ) ;\nvar client = gepard.getClient() ;\nclient.emit ( \"ALARM\",\n{\n\tvar thiz = this ;\n\twrite: function()\n\t{\n\t\tthiz.end() ; // close connection after written\n\t}\n});\n```\n\nBrowser\n\n```js\nvar client = gepard.getWebClient ( 17502[, host] ) ;\nclient.emit ( \"CONFIG-CHANGED\" ) ;\n```\n\nJava\n\n```java\nimport org.gessinger.gepard.Client ;\nClient client = Client.getInstance() ;\nclient.emit ( \"ALARM\" ) ;\n```\n\nPython\n\n```python\nimport gepard\nclient = gepard.Client.getInstance()\nclient.emit ( \"ALARM\" )\n```\n\nPHP\n```php\nnamespace Gepard;\nrequire ( 'vendor/autoload.php' );\nuse Gepard;\n$client = Client::getInstance();\n$client->emit ( 'ALARM' );\n```\nDetails in:\n\n* JavaScript: [gepard/xmp/Emitter.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/Emitter.js)\n* JavaScript: [gepard/xmp/EmitterWithStatusInfo.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/EmitterWithStatusInfo.js)\n* JavaScript: [gepard/xmp/EmitterWithBody.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/EmitterWithBody.js)\n* Java: [gepard/java/org.gessinger/gepard/xmp/Emitter.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/Emitter.java)\n* Java: [gepard/java/org.gessinger/gepard/xmp/EmitterWithStatusInfo.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/EmitterWithStatusInfo.java)\n* Java: [gepard/java/org.gessinger/gepard/xmp/EmitterWithBody.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/EmitterWithBody.java)\n* Python: [Emitter.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/Emitter.py)\n* Python: [EmitterWithStatusInfo.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/EmitterWithStatusInfo.py)\n* Python: [EmitterWithBody.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/EmitterWithBody.py)\n* PHP: [Emitter.php](https://github.com/gessinger-hj/gepard-php/blob/master/xmp/Emitter.php)\n\n### Locks\n\nApplication\n\n```js\n\tvar gepard = require ( \"gepard\" ) ;\n\tvar lock = new gepard.Lock ( \"resid:main\" ) ;\n```\nBrowser\n\n```js\ngepard.port = 17502 ;\nvar lock = new gepard.Lock ( \"resid:main\" ) ;\n```\nCode\n\n```js\nlock.acquire ( function ( err )\n{\n\tconsole.log ( this.toString() ) ;\n\tif ( this.isOwner() )\n\t{\n\t\t.........\n\t\tthis.release() ;\n\t}\n} ) ;\n```\n\nJava\n\n```java\nimport org.gessinger.gepard.Lock ;\nLock lock = new Lock ( \"resid:main\" ) ;\nlock.acquire() ;\nif ( lock.isOwner() )\n{\n\t.........\n\tlock.release() ;\n}\n```\n\nPython\n\n```python\nimport gepard\n\nlock = gepard.Lock ( \"resid:main\" )\nlock.acquire()\n\nif lock.isOwner():\n\t......................\n\tlock.release()\n\n```\n\nDetails in:\n\n* JavaScript: [gepard/xmp/Locker.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/Locker.js)\n* Java: [gepard/java/org.gessinger/gepard/xmp/Locker.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/Locker.java)\n* Python: [Locker.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/Locker.py)\n\n\n### Semaphores\n\nApplication\n\n```js\n\tvar gepard = require ( \"gepard\" ) ;\n\tvar sem = new gepard.Semaphore ( \"user:4711\" ) ;\n```\nBrowser\n\n```js\ngepard.port = 17502 ;\nvar sem = new gepard.Semaphore ( \"user:4711\" ) ;\n```\n\nCode\n\n```js\nsem.acquire ( function ( err )\n{\n\tconsole.log ( this.toString() ) ;\n\n\t\t.....................\n\n\tthis.release() ;\n} ) ;\n```\n\nJava\n\nAsynchronously\n\n```java\nimport org.gessinger.gepard.Semaphore ;\nimport org.gessinger.gepard.SemaphoreCallback ;\nfinal Semaphore sem = new Semaphore ( \"user:4711\" ) ;\nsem.acquire ( new SemaphoreCallback()\n{\n\tpublic void acquired ( Event e )\n\t{\n\t\tSystem.out.println ( sem ) ;\n\t\t.....................\n\t\tsem.release() ;\n\t}\n}) ;\n```\n\nSynchronously\n\n```java\nimport org.gessinger.gepard.Semaphore ;\nfinal Semaphore sem = new Semaphore ( \"user:4711\" ) ;\n// with or without a timeout\nsem.acquire(5000) ;\n\nif ( sem.isOwner() ) // if not timeout occured\n{\n\t\t.....................\n\tsem.release() ;\n}\n```\n\nPython\n\nAsynchronously\n\n```python\nimport gepard\n\ndef on_owner(sem):\n\t................\n\tsem.release()\n\nsem = gepard.Semaphore ( \"user:4711\" )\nsem.acquire ( on_owner )\n```\n\nSynchronously\n\n```python\n\nimport gepard\n\nsem = gepard.Semaphore ( name )\n\nsem.acquire ( 5 ) # with or without a timeout\n\nif sem.isOwner():\n\t...........\n\tsem.release()\n```\n\nDetails in:\n\n* JavaScript: [gepard/xmp/AsyncSemaphore.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/AsyncSemaphore.js)\n* Java: [gepard/java/org.gessinger/gepard/xmp/AsyncSemaphore.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/AsyncSemaphore.java)\n* Java: [gepard/java/org.gessinger/gepard/xmp/AsyncSemaphore.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/BlockingSemaphore.java)\n* Python: [AsyncSemaphore.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/AsyncSemaphore.py)\n* Python: [BlockingSemaphore.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/BlockingSemaphore.py)\n\n### Request / Result\n\n#### Send request\n\nApplication:\n\n```js\n\tvar gepard = require ( \"gepard\" ) ;\n\tvar client = gepard.getClient() ;\n```\nBrowser:\n\n```js\n\tvar client = gepard.getWebClient ( 17502[, host] ) ;\n```\nCode:\n\n```js\nclient().request ( \"getFileList\"\n, function result(e)\n\t{\n\t\tconsole.log ( e.getBody().list ) ;\n\t\tthis.end() ;\n\t});\n```\n\nJava\n\n```java\nimport org.gessinger.gepard.Client ;\nimport org.gessinger.gepard.ResultCallback ;\nimport org.gessinger.gepard.Util ;\nimport java.util.List ;\nfinal Client client = Client.getInstance() ;\nclient.request ( \"getFileList\", new ResultCallback()\n{\n\tpublic void result ( Event e )\n\t{\n\t\tif ( e.isBad() )\n\t\t{\n\t\t\tSystem.out.println ( \"e.getStatusReason()=\" + e.getStatusReason() ) ;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tList<String> list = (List<String>) e.getBodyValue ( \"file_list\" ) ;\n\t\t\tSystem.out.println ( Util.toString ( list ) ) ;\n\t\t}\n\t\tclient.close() ;\n\t}\n}) ;\n\n```\n\nPython\n\n```python\nimport gepard\n\nclient = gepard.Client.getInstance()\n\ndef getFileList ( e ):\n\tif e.isBad():\n\t\tprint ( e.getStatusReason() )\n\telse:\n\t\tprint ( e.getValue ( \"file_list\" ) )\n\te.getClient().close()\n\nclient.request ( \"getFileList\", getFileList )\n\n```\n\nDetails in:\n\n* JavaScript: [gepard/xmp/Requester.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/Requester.js)\n* Java: [gepard/java/org.gessinger/gepard/xmp/Requester.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/Requester.java)\n* Python: [Requester.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/Requester.py)\n* PHP: [Requester.php](https://github.com/gessinger-hj/gepard-php/blob/master/xmp/Requester.php)\n\n#### Send result\n\nApplication:\n\n```js\n\tvar gepard = require ( \"gepard\" ) ;\n\tvar client = gepard.getClient() ;\n```\nBrowser:\n\n```js\n\tvar client = gepard.getWebClient ( 17502[, host] ) ;\n```\nCode:\n\n```js\nvar list = [ \"one.js\", \"two.js\", \"three.js\" ] ;\nclient.on ( \"getFileList\", function ( e )\n{\n\te.getBody().list = list ;\n\te.sendBack() ;\n});\n```\n\nJava\n\n```java\nimport org.gessinger.gepard.Client ;\nimport org.gessinger.gepard.EventListener ;\nimport org.gessinger.gepard.Event ;\nfinal Client client = Client.getInstance() ;\nclient.on ( name, new EventListener()\n{\n\tpublic void event ( Event e )\n\t{\n\t\tString[] fileList = new String[] { \"a.java\", \"b.java\", \"c.java\" } ;\n\t\te.putBodyValue ( \"file_list\", fileList ) ;\n\t\te.sendBack() ;\n\t}\n} ) ;\n```\n\nPython\n\n```python\nimport gepard\nclient = gepard.Client.getInstance()\n\nfileList = [ \"a.py\", \"b.py\", \"c.py\" ] ;\ndef on_getFileList ( event ):\n\tprint ( \"Request in\" ) ;\n\tprint ( \"File list out:\" ) ;\n\tprint ( fileList ) ;\n\tevent.body[\"file_list\"] = fileList ;\n\tevent.sendBack() ;\n\nclient.on ( \"getFileList\", on_getFileList )\n```\n\nDetails in:\n\n* JavaScript: [gepard/xmp/Responder.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/Responder.js)\n* Java: [gepard/java/org.gessinger/gepard/xmp/Responder.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/Responder.java)\n* Python: [Responder.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/Responder.py)\n* PHP: [Responder.php](https://github.com/gessinger-hj/gepard-php/blob/master/xmp/Responder.php)\n\n## Examples Long\n\n### Event listener\n\n#### In Application\n\n```js\nvar gepard = require ( \"gepard\" ) ;\nvar c = gepard.getClient() ;\n\nvar eventName = \"ALARM\" ;\nconsole.log ( \"Listen for events with name=\" + eventName ) ;\nc.on ( eventName, function(e)\n{\n\tconsole.log ( e ) ;\n});\nc.on('end', function()\n{\n\tconsole.log('socket disconnected');\n});\nc.on('error', function ( event)\n{\n\tconsole.log( event );\n});\nc.on('shutdown', function()\n{\n\tconsole.log('broker shut down');\n});\n```\n\n#### In Browser\n\n```html\n<script type=\"text/javascript\" src=\"Event.js\" ></script>\n<script type=\"text/javascript\" src=\"MultiHash.js\" ></script>\n<script type=\"text/javascript\" src=\"GPWebClient.js\" ></script>\n```\n\n```js\n\t\tvar wc = gepard.getWebClient ( 17502 ) ;\n\t\tthis.wc.on ( \"open\", function onopen()\n\t\t{\n\t\t}) ;\n\t\tthis.wc.on ( \"error\", function onerror()\n\t\t{\n\t\t}) ;\n\t\tthis.wc.on ( \"close\", function onclose()\n\t\t{\n\t\t}) ;\n\t\twc.on ( \"ALARM\", function event_listener_callback ( e )\n\t\t{\n\t\t\tconsole.log ( e.toString() ) ;\n\t\t}) ;\n```\n\n### Event Emitter\n\n#### In Application\n\n```js\nvar gepard  = require ( \"gepard\" ) ;\nvar c = gepard.getClient() ;\n\nvar event = new gepard.Event ( \"CONFIG-CHANGED\" ) ;\nevent.setBody ( { \"config-name\" : \"app.conf\" } ) ;\nc.emit ( event,\n{\n\twrite: function() // close connection after write\n\t{\n\t\tc.end() ;\n\t}\n});\n```\n#### In Browser\n\n```html\n<script type=\"text/javascript\" src=\"Event.js\" ></script>\n<script type=\"text/javascript\" src=\"MultiHash.js\" ></script>\n<script type=\"text/javascript\" src=\"GPWebClient.js\" ></script>\n```\n\n```js\nvar wc = gepard.getWebClient ( 17502 ) ;\nvar event = new gepard.Event ( \"CONFIG-CHANGED\" ) ;\nevent.setBody ( { \"config-name\" : \"app.conf\" } ) ;\nwc.emit ( event ) ;\n```\n\n# File Transfer with the FileContainer Class\n\nThe basic usage of this class is as follows:\n\n## FileSender\n\nJavaScript:\n<br/>See also: [gepard/xmp/FileSender.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/FileSender.js)\n\n\n```js\nvar gepard  = require ( \"gepard\" ) ;\nvar client = gepard.getClient() ;\nvar event = new gepard.Event ( \"__FILE__\" ) ;\nvar file = \"<full-file-name>\" ;\nevent.putValue ( \"DATA\", new gepard.FileContainer ( file ) ) ;\nclient.request ( event, function ( e )\n{\n\tif ( e.isBad() )\n\t{\n\t\tconsole.log ( e.getStatus() ) ;\n\t}\n\telse\n\t{\n\t\tconsole.log ( \"File \" + file + \" sent successfully.\" )\n\t}\n\tthis.end() ;\n}) ;\n```\n\nPython:\n<br/>See also: [gepard/python/xmp/FileSender.py](https://github.com/gessinger-hj/gepard/blob/master/python/xmp/FileSender.py)\n\n```python\nclient = gepard.Client.getInstance()\n\nevent = gepard.Event ( \"__FILE__\" )\n\nfile = \"<full-file-name>\" ;\nevent.putValue ( \"DATA\", gepard.FileContainer ( file ) )\n\ndef result ( e ):\n\tif e.isBad():\n\t\tprint ( e.getStatusReason() )\n\telse:\n\t\tprint ( \"File \" + file + \" sent successfully.\" )\n\te.getClient().close()\n\nprint ( \"Sending \" + file )\nclient.request ( event, result )\n```\nJava:\n<br/>See also: [gepard/java/org.gessinger/gepard/xmp/FileSender.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/FileSender.java)\n\n```java\n\t\tfinal Client client = Client.getInstance() ;\n\n\t\tEvent event = new Event ( \"__FILE__\" ) ;\n\t\tfinal String file = \"<full-file-name>\"\n\t\tevent.putValue ( \"DATA\", new FileContainer ( file ) ) ;\n\t\tclient.request ( event, new ResultCallback()\n\t\t{\n\t\t\tpublic void result ( Event e )\n\t\t\t{\n\t\t\t\tif ( e.isBad() )\n\t\t\t\t{\n\t\t\t\t\tSystem.out.println ( e ) ;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tSystem.out.println ( \"File \" + file + \" sent successfully.\" ) ;\n\t\t\t\t\tSystem.out.println ( \"code: \" + e.getStatusCode() );\n\t\t\t\t\tSystem.out.println ( \"name: \" + e.getStatusName() );\n\t\t\t\t\tSystem.out.println ( \"reason: \" + e.getStatusReason() );\n\t\t\t\t}\n\t\t\t\tclient.close() ;\n\t\t\t}\n\t\t}) ;\n```\n\n##FileReceiver\n\nJavaScript:\n<br/>See also: [gepard/xmp/FileReceiver.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/FileReceiver.js)\n\n```js\n\tvar client = gepard.getClient() ;\n\tclient.on ( \"__FILE__\", function(e)\n\t{\n\t\tvar data = e.removeValue ( \"DATA\" ) ;\n\t\tconsole.log ( data.getName() + \" received.\" ) ;\n\t\tvar fname = data.getName() + \".in\" ;\n\t\ttry\n\t\t{\n\t\t\tdata.write ( fname ) ;\n\t\t\tconsole.log ( fname + \" written.\" ) ;\n\t\t}\n\t\tcatch ( exc )\n\t\t{\n\t\t\te.control.status = { code:1, name:\"error\", reason:\"could not write: \" + fname } ;\n\t\t\tconsole.log ( exc ) ;\n\t\t}\n\t\te.sendBack() ;\n\t});\n```\n\nPython:\n<br/>See also: [FileReceiver.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/FileReceiver.py)\n\n```py\nclient = gepard.Client.getInstance()\n\ndef on___FILE__ ( e ):\n\tdata = e.removeValue ( \"DATA\" )\n\tprint ( data.getName() + \" received.\" ) ;\n\tfname = data.getName() + \".in\"\n\ttry:\n\t\tdata.write ( fname ) ;\n\t\tprint ( fname + \" written.\")\n\texcept Exception as exc:\n\t\tprint ( exc )\n\te.sendBack() ;\n\nclient.on ( \"__FILE__\", on___FILE__ )\n```\nJava:\n<br/>See also: [gepard/java/org.gessinger/gepard/xmp/FileReceiver.java](https://github.com/gessinger-hj/gepard/blob/master/java/src/org/gessinger/gepard/xmp/FileReceiver.java)\n\n```java\nfinal Client client = Client.getInstance() ;\nclient.on ( \"__FILE__\", new EventListener()\n{\n\tpublic void event ( Event e )\n\t{\n\t\ttry\n\t\t{\n\t\t\tFileContainer fileContainer = (FileContainer) e.removeValue ( \"DATA\" ) ;\n\t\t\tString fname = fileContainer.getName() + \".in\" ;\n\t\t\tfileContainer.write ( fname ) ;\n\t\t\tSystem.out.println ( fname + \" written.\" );\n\t\t\te.setStatus ( 0, \"success\", \"File accepted.\" ) ;\n\t\t}\n\t\tcatch ( Exception exc )\n\t\t{\n\t\t\te.setStatus ( 1, \"error\", \"File not saved.\" ) ;\n\t\t\tSystem.out.println ( Util.toString ( exc ) ) ;\n\t\t}\n\t\ttry\n\t\t{\n\t\t\te.sendBack() ;\n\t\t}\n\t\tcatch ( Exception exc )\n\t\t{\n\t\t\tSystem.out.println ( Util.toString ( exc ) ) ;\n\t\t}\n\t}\n} ) ;\n\n```\n\n# Heartbeat and Reconnection Capability Parameterization\n\n## Broker Side\n\nThe default ping interval for the broker is 180000 milli-sec or 3 minutes. This value can be changed in different ways:\n\n1.  Startup parameter: --gepard.heartbeat.millis=&lt;nnn>\n1.  Evironment variable: GEPARD_HEARTBEAT_MILLIS=&lt;nnn>\n1.  Variable in configuration-file: { \"heartbeatMillis\":&lt;nnn> }\n1.  In program: broker.setHeartbeatMillis ( &lt;nnn> )\n\n## Client Side\n\nThe default is reconnect=false\n\n This value can be changed in different ways:\n \n1.  Startup parameter: --gepard.reconnect=true\n1.  environment variable: export GEPARD_RECONNECT=true\n1.  client.setReconnect ( true ) before any socket connection is active\n1.  gepard.setProperty ( 'gepard.reconnect', 'true' )\n\nIf the boker is shut down all clients receive a __shutdown event__.\nIf __reconnect==true__ the appropriate callback in the client is called and the client api tries to reconnect.\n<br/>\nAt this place a call to __client.setReconnect(false|False)__ initiates a Client-shutdown without reconnection.\n<br/>\nThere are two new callbacks available signaling the state-change to the owner-application:\n\n* Java\n\t1.  client.onReconnect ( InfoCallback icb )\n\t1.  client.onDisconnect ( InfoCallback icb )\n\n* Python\n\t1.  client.onReconnect ( &lt;callback> )\n\t1.  client.onDisconnect ( &lt;callback> )\n\n* JavaScript\n\t1.  client.on ( \"reconnect\", &lt;callback> )\n\t1.  client.on ( \"disconnect\", &lt;callback> )\n\n### Example to test\n\n1.  open a terminal, execute: node_modules/.bin/gp.broker or node node_modules/gepard/src/Broker.js\n1.  open a terminal, execute: node node_modules/gepard/xmp/Listener.js\n1.  open a terminal, execute: python node_modules/gepard/python/xmp/Listener.py\n1.  open a terminal, goto node_modules/gepard/java\n\t\t<br/> execute: java -cp lib/Gepard.jar:lib/gson-2.3.1.jar org.gessinger.gepard.xmp.Listener\n\nThen goto terminal one and kill the Broker either with ^C ( ctrl+C ) or with kill -9 &lt;pid> or with the taskmanger on windows. \n<br/>\nAppropriate output is visible.\n<br/>\nThen start the Broker again and all clients reconnect again. Check with gp.info that all event-listener are registered again.\n\n# The TracePoint Concept\n\nTracePoints or short __TP__ are used to monitor a data flow at specific places in an application. The combination of all traced-data\nhelps to analyze and control the behaviour especially within a distributed system..\n<br/>\nIt is very important to use these TracePoints immediately in a running system without changing static configuration\nand system-restart.\n<br/>\nAll defined TracePoints in a Gepard-based distributed application can be switched on/off and reconfigured at runtime on behalf of the Admin programm.\nTracePoint commands are sent to the running Broker and forwarded to all or selected clients.\n\n## TracePoints in the Broker\n\nThere are 2 predefined __TPs__ in the Broker. Each TP in the context of a program has a unique name to address commands to.\n<br/>\n\n1.  __EVENT_IN__\n\tIf this TP is switched on all incoming events are logged to the Broker's log-file.\n1.  __EVENT_OUT__\n\tIf this TP is switched on all outgoing events are logged to the Broker's log-file.\n\nThe status of these __TPs__ can be viewed with the command: __gp.tplist__\n<br/>\nThe output reads as:\n```js\n{ tracePointStatus:\n\t { name: 'broker',\n\t\t list:\n\t\t\t[ { name: 'EVENT_IN', active: false },\n\t\t\t\t{ name: 'EVENT_OUT', active: false } ],\n\t\t output: 'local' } }\n```\nSwitching the __TPs__ is done with the commands:\n\n- __gp.tpon__ [ &lt;tp-name> { , &lt;tp-name> }] \n\tswitch on all or given __TPs__\n- __gp.tpoff__ [ &lt;tp-name> { , &lt;tp-name> }] \n\tswitch off all or given __TPs__\n- __gp.tp__\n\ttoggle all __TPs__\n\nIn all cases the current status of the __TPs__ is shown.\n\n## TracePoints in the Client\n\nThere are 2 predefined __TPs__ in each client. Each TP in the context of a program has a unique name to address commands to.\n<br/>\n\n1.  __EVENT_IN__\n\tIf this TP is switched on all incoming events are logged.\n1.  __EVENT_OUT__\n\tIf this TP is switched on all outgoing events are logged.\n\nThe status of these __TPs__ can be viewed with the command: __gp.client.tplist__\n<br/>\nThe output reads as:\n\n```js\n{ tracePointStatus:\n\t { name: 'broker',\n\t\t list:\n\t\t\t[ { name: 'EVENT_IN', active: false },\n\t\t\t\t{ name: 'EVENT_OUT', active: false } ],\n\t\t output: 'local' } }\n```\n\nSwitching the __TPs__ is done with the commands:\n\n- __gp.client.tpon__ [ &lt;tp-name> { , &lt;tp-name> }] [ --output=remote|local ] [ --sid=&lt;sid-of-specific-client> ]\n\t<br/>\n\tswitch on all or given TPs\n\t<br/>\n\toptional: direct output to local or remote to the Broker.\n- __gp.client.tpoff__ [ &lt;tp-name> { , &lt;tp-name> }]  [ --output=remote|local ] [ --sid=&lt;sid-of-specific-client> ]\n\t<br/>\n\tswitch off all or given TPs\n\t<br/>\n\toptional: direct output to local or remote to the Broker.\n- __gp.client.tp__  [ --output=remote|local ] [ --sid=&lt;sid-of-specific-client> ]\n\t<br/>\n\ttoggle all TPs\n\t<br/>\n\toptional: direct output to local or remote to the Broker.\n\nIn all cases the current status of the __TPs__ is shown.\n\nExamples with 2 clients:\n- __gp.client.tplist__\n\n```js\n{ tracePointStatus:\n\t { name: 'client',\n\t\t list:\n\t\t\t[ { name: 'EVENT_IN', active: false },\n\t\t\t\t{ name: 'EVENT_OUT', active: false },\n\t\t output: 'local' },\n\tsid: '::ffff:127.0.0.1_44109_1452621748330',\n\tapplicationName: 'Listener' }\n{ tracePointStatus:\n\t { name: 'client',\n\t\t list:\n\t\t\t[ { name: 'EVENT_IN', state: false },\n\t\t\t\t{ name: 'EVENT_OUT', state: false } ],\n\t\t output: 'local' },\n\tsid: '::ffff:127.0.0.1_44246_1452621873697',\n\tapplicationName: 'org.gessinger.gepard.xmp.Listener' }\n```\n- __gp.client.tplist --sid=::ffff:127.0.0.1_44246_1452621873697__\n\n```js\n{ tracePointStatus:\n\t { name: 'client',\n\t\t list:\n\t\t\t[ { name: 'EVENT_IN', state: false },\n\t\t\t\t{ name: 'EVENT_OUT', state: false } ],\n\t\t output: 'local' },\n\tsid: '::ffff:127.0.0.1_44246_1452621873697',\n\tapplicationName: 'org.gessinger.gepard.xmp.Listener' }\n```\n\n- __gp.client.tp --sid=::ffff:127.0.0.1_44246_1452621873697 --output=remote__\n\n```js\n{ tracePointStatus:\n\t { name: 'client',\n\t\t list:\n\t\t\t[ { name: 'EVENT_IN', state: true },\n\t\t\t\t{ name: 'EVENT_OUT', state: true } ],\n\t\t output: 'remote' },\n\tsid: '::ffff:127.0.0.1_44246_1452621873697',\n\tapplicationName: 'org.gessinger.gepard.xmp.Listener' }\n```\n\n# Zeroconf Usage in Detail\n\n## Zeronconf on the Broker's Side\n\nIf configured the gepard Broker publishes a service in the local subnet and can be discovered by any interested client.\n<br/>\nThe fully qualified domain name (FQDN) for the service consists out of 3 parts:\n\n1.\tname, e.g. __Broker__\n\n1.\ttype, e.g. __gepard__\n\n1.\tprotocol, **tcp.local**\n\nThe FQDN is derived from this parameters as: __Broker._gepard._tcp.local__\n<br/>\nThis name and type can be defined by\n\n1.\tan entry in the broker's json config\n<br/>\n\tThe form is either a comma separated list like\n\n\t```js\n\t{\n\t\t\"zeroconf\": [<name>,]<type> [ ,<port>|0]\n\t}\n\t```\n\tor\n\t```js\n\t{\n\t\t\"zeroconf\": { \"name\":<name> , \"type\": <type> [ , \"port\": <port>|0] }\n\t}\n\t```\n1.\ta startup parameter of the form: --gepard.zeroconv=[&lt;name>,]&lt;type>[,&lt;port>]\n\n1.\tan environment variable of the form:\n\t\texport GEPARD_ZEROCONF=[&lt;name>,]&lt;type>[,&lt;port>]\n\n1.\tcalling the method\n\t\tbroker.setZeroconfParameter ( [&lt;name>,]&lt;type> [ ,&lt;port>] )\n\nIf only the &lt;type> is given the &lt;name> is choosen to be:\n```js\nGepard-[H:<hostname>]-[P:<port>]\n```\n\nThis postfix __-[H:&lt;hostname>]-[P:&lt;port>]__ is always appended to make the name unique.\n<br/>\nIf the &lt;port> is not given the standard definitions are used.\nIf the port is __exactly 0__ a random free port is choosen. Thus no special arrangement is needed for running several brokers on one machine.\nThe __TXT__ segment contains a comma-list of all registered event-names as TOPIC entry and a comma-list of all channels as CHANNELS entry.\nWith this an interested client can choose a a Broker depending on this information e.g. with the methods\n\n*\tservice.topicExists(&lt;topic-name&gt;) and\n\n* service.channelExists(&lt;channel-name&gt;)\n\nThis convention is expanded because of the lack of proper parsing the __TXT__ segment of the advertised service in the python zeroconf-module.\nIn addition to the __TXT__ segment the advertised service-name contains the comma-lists of topics and channels if given.\nThe format is:\n\n[T:topic1,topic2,...] and [C:channel1,channel2,...]\n\nWith this information a client can make a profound decision whether to connect to a found broker or ignore it and search another instance.\n\n## Zeroconf on the Client's Side\n\nUp to now only the JavaScript and Python flavors works out of the box. There is no reliable pure Java implementation available.\n\nSuppose the broker is started with __test-gepard,0__. (service-type is test-gepard and port is arbitrary)\n\n```js\ngp.broker --gepard.zeroconf=test-gepard,0\n```\n\n<br/>\nAn interested listener would do the following:\n\n__JavaScript__\n\n```js\nvar gepard = require ( \"gepard\" ) ;\nvar client = gepard.getClient ( { type: 'test-gepard' }, function acceptService ( service )\n{\n\t// optional e.g.: ignore service which is not on localhost with:\n\t// if ( ! service.isLocalhost() ) return false ;\n\treturn true ;\n} ) ;\nclient.setReconnect ( true ) ; // This is for re-connect if broker dies.\n                               // in this case the above function <b>acceptService</b> is re-used.\nclient.on ( \"ALARM\", (e) => console.log ( e ) ) ; // The \"ALARM\" listener is registered.\n```\n\nor simpler:\n\n```js\nvar client = gepard.getClient ( 'test-gepard' ) ;\nclient.setReconnect ( true ) ;\nclient.on ( \"ALARM\", (e) => console.log ( e ) ) ;\n```\n\nExample: [ZeroconfListener.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/ZeroconfListener.js)\n\n__Python__\n```py\nimport gepard\n\ndef acceptService ( client, service ):\n\t# optional e.g.: ignore service which is not on localhost with:\n\t# if not service.isLocalhost() return False\n\treturn True\n\ndef on_ALARM ( event ):\n\tprint ( event )\n\nclient = gepard.Client.getInstance('test-gepard',acceptService)\nclient.setReconnect ( True )\nclient.on ( \"ALARM\", on_ALARM )\n```\n\nor simpler:\n\n```py\ndef on_ALARM ( event ):\n\tprint ( event )\ngepard.Client.getInstance('test-gepard').setReconnect ( True ).on ( \"ALARM\", on_ALARM )\n```\n\nExample: [ZeroconfListener.py](https://github.com/gessinger-hj/gepard-python/blob/master/xmp/ZeroconfListener.py)\n\nIf a client uses no connection parameter it can be parametrised by\n\n*\tstart-parameter: --gepard.zeroconf.type=[__localhost__:]&lt;type> or\n\n*\tenvironment-parameter: export GEPARD_ZEROCONF_TYPE=[__localhost__:]&lt;type>\n\n__localhost:__ is optional and indicates to include only Broker running on the same host.\n\nIn this case the code to write is minimal:\n\n__JavaScript__\n\n```js\nvar client = gepard.getClient() ;\nclient.setReconnect ( true ) ;\nclient.on ( \"ALARM\", (e) => console.log ( e ) ) ;\n```\n__Python__\n\n```py\ndef on_ALARM ( event ):\n\tprint ( event )\n\nclient = gepard.Client.getInstance()\nclient.setReconnect ( True )\nclient.on ( \"ALARM\", on_ALARM )\n```\n\nThus the behaviour of a client can be easily changed with only external parameters without\nany code-change.\n<br/>\n\nAn interested emitter would do the following:\n\n__JavaScript__\n\n```js\nvar gepard = require ( \"gepard\" ) ;\nvar client = gepard.getClient ( 'test-gepard', function acceptService ( service )\n{\n\tif ( service.getTopics().indexOf ( \"ALARM\" ) < 0 ) // ignore if listener does not exist\n\t{\n\t\treturn ;\n\t}\n\tclient.emit ( \"ALARM\",\n\t{\n\t  write: function() // The event is sent -> end connection and exit\n\t  {\n\t    client.end() ;\n\t  }\n\t});\n\treturn true ;\n} ) ;\n```\n__Python__\n```py\ndef acceptService ( client, service ):\n\tprint ( service )\n\tif service.isLocalHost():\n\t\tclient.emit ( \"ALARM\" )\n\t\tclient.close()\n\t\treturn True\n\treturn False\n\nclient = gepard.Client.getInstance ( 'test-gepard', acceptService )\n```\n\nor with external parametrisation use simply the simple Emitter.py in python/xmp and start it as:\n```py\npython Emitter.py --gepard.zeroconf.type=test-gepard\n```\n\nExample: [ZeroconfEmitter.js](https://github.com/gessinger-hj/gepard/blob/master/xmp/ZeroconfEmitter.js),[ZeroconfEmitter.py](https://github.com/gessinger-hj/gepard-py","maintainers":[{"name":"gessinger-hj","email":"gessinger.hj@gmail.com"}],"time":{"modified":"2022-06-18T07:42:09.089Z","created":"2015-01-29T21:47:09.141Z","1.0.0":"2015-01-29T21:47:09.141Z","1.0.2":"2015-02-17T09:20:18.369Z","1.2.0":"2015-03-10T19:35:25.036Z","1.2.1":"2015-04-08T20:46:58.827Z","1.2.2":"2015-04-22T22:16:56.496Z","1.2.3":"2015-06-25T22:12:30.898Z","1.3.0":"2015-08-17T08:33:24.561Z","1.3.1":"2015-08-18T21:47:01.036Z","1.3.2":"2015-08-18T21:49:19.909Z","1.3.3":"2015-10-28T18:10:38.714Z","1.4.0":"2015-11-18T17:44:53.289Z","1.4.1":"2015-11-18T18:11:09.122Z","1.4.2":"2015-11-21T11:42:51.401Z","1.4.3":"2015-12-18T12:05:34.728Z","1.4.4":"2016-01-14T13:13:34.133Z","1.4.5":"2016-01-19T14:01:59.566Z","1.5.0":"2016-02-04T17:02:16.073Z","1.5.1":"2016-02-14T22:27:54.640Z","1.6.0":"2016-04-11T16:32:14.762Z","1.7.0":"2016-05-24T13:21:49.913Z","1.7.1":"2016-05-24T15:00:08.402Z","1.7.2":"2016-07-13T12:11:35.017Z","1.7.3":"2016-07-13T13:33:52.916Z","1.7.4":"2016-07-13T14:58:13.602Z","1.7.5":"2016-07-29T20:26:06.314Z","1.7.6":"2016-08-02T14:19:29.549Z","1.7.7":"2016-08-02T14:28:25.445Z","1.7.8":"2016-08-11T14:16:35.154Z","1.7.9":"2016-08-16T11:22:55.683Z","1.8.0":"2016-08-26T18:09:41.162Z","1.8.1":"2016-09-12T16:58:08.314Z","1.8.2":"2016-10-07T14:16:45.403Z","1.8.3":"2017-01-18T15:45:23.045Z","1.8.4":"2017-02-02T13:04:18.509Z","1.8.5":"2017-02-02T14:50:18.979Z","1.9.0":"2017-07-19T16:40:05.286Z","1.9.1":"2017-08-01T21:52:50.279Z","1.9.2":"2017-08-19T18:36:24.693Z","1.9.3":"2017-10-28T17:58:01.369Z","1.9.4":"2017-10-29T14:09:08.914Z"},"homepage":"https://github.com/gessinger-hj","keywords":["distributed-applications","events","semaphores","locks","messages","JavaScript","Java","Python","PHP","message"],"repository":{"type":"git","url":"git+https://github.com/gessinger-hj/gepard.git"},"author":{"name":"Hans-Jürgen Gessinger","email":"gessinger.hj@gmail.com"},"bugs":{"url":"https://github.com/gessinger-hj/gepard/issues"},"readmeFilename":"README.md","license":"MIT"}