update
This commit is contained in:
parent
d924db4e1c
commit
7f9e1446ae
|
@ -98,4 +98,25 @@ window.noname_source_list=[
|
|||
'theme/style/hp/image/hp2.png',
|
||||
'theme/style/hp/image/hp3.png',
|
||||
'theme/style/hp/image/hp4.png',
|
||||
'node_modules/ws/index.js',
|
||||
'node_modules/ws/package.json',
|
||||
'node_modules/ws/lib/BufferPool.js',
|
||||
'node_modules/ws/lib/BufferUtil.fallback.js',
|
||||
'node_modules/ws/lib/BufferUtil.js',
|
||||
'node_modules/ws/lib/ErrorCodes.js',
|
||||
'node_modules/ws/lib/Extensions.js',
|
||||
'node_modules/ws/lib/PerMessageDeflate.js',
|
||||
'node_modules/ws/lib/Receiver.hixie.js',
|
||||
'node_modules/ws/lib/Receiver.js',
|
||||
'node_modules/ws/lib/Sender.hixie.js',
|
||||
'node_modules/ws/lib/Sender.js',
|
||||
'node_modules/ws/lib/Validation.fallback.js',
|
||||
'node_modules/ws/lib/Validation.js',
|
||||
'node_modules/ws/lib/WebSocket.js',
|
||||
'node_modules/ws/lib/WebSocketServer.js',
|
||||
'node_modules/ultron/index.js',
|
||||
'node_modules/ultron/package.json',
|
||||
'node_modules/ultron/test.js',
|
||||
'node_modules/options/package.json',
|
||||
'node_modules/options/lib/options.js',
|
||||
];
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
window.noname_update={
|
||||
version:'1.8.2.0',
|
||||
version:'1.8.2.1',
|
||||
changeLog:[
|
||||
'联机预览版(身份模式,标准包)',
|
||||
'新卡牌样式(by @_游离感_ )',
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
ALL_TESTS = $(shell find test/ -name '*.test.js')
|
||||
|
||||
run-tests:
|
||||
@./node_modules/.bin/mocha \
|
||||
-t 2000 \
|
||||
$(TESTFLAGS) \
|
||||
$(TESTS)
|
||||
|
||||
test:
|
||||
@$(MAKE) NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests
|
||||
|
||||
.PHONY: test
|
|
@ -1,69 +0,0 @@
|
|||
# options.js #
|
||||
|
||||
A very light-weight in-code option parsers for node.js.
|
||||
|
||||
## Usage ##
|
||||
|
||||
``` js
|
||||
var Options = require("options");
|
||||
|
||||
// Create an Options object
|
||||
function foo(options) {
|
||||
var default_options = {
|
||||
foo : "bar"
|
||||
};
|
||||
|
||||
// Create an option object with default value
|
||||
var opts = new Options(default_options);
|
||||
|
||||
// Merge options
|
||||
opts = opts.merge(options);
|
||||
|
||||
// Reset to default value
|
||||
opts.reset();
|
||||
|
||||
// Copy selected attributes out
|
||||
var seled_att = opts.copy("foo");
|
||||
|
||||
// Read json options from a file.
|
||||
opts.read("options.file"); // Sync
|
||||
opts.read("options.file", function(err){ // Async
|
||||
if(err){ // If error occurs
|
||||
console.log("File error.");
|
||||
}else{
|
||||
// No error
|
||||
}
|
||||
});
|
||||
|
||||
// Attributes defined or not
|
||||
opts.isDefinedAndNonNull("foobar");
|
||||
opts.isDefined("foobar");
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
## License ##
|
||||
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012 Einar Otto Stangvik <einaros@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -1,22 +0,0 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
|
@ -1,97 +0,0 @@
|
|||
# Ultron
|
||||
|
||||
[![Made by unshift](https://img.shields.io/badge/made%20by-unshift-00ffcc.svg?style=flat-square)](http://unshift.io)[![Version npm](http://img.shields.io/npm/v/ultron.svg?style=flat-square)](http://browsenpm.org/package/ultron)[![Build Status](http://img.shields.io/travis/unshiftio/ultron/master.svg?style=flat-square)](https://travis-ci.org/unshiftio/ultron)[![Dependencies](https://img.shields.io/david/unshiftio/ultron.svg?style=flat-square)](https://david-dm.org/unshiftio/ultron)[![Coverage Status](http://img.shields.io/coveralls/unshiftio/ultron/master.svg?style=flat-square)](https://coveralls.io/r/unshiftio/ultron?branch=master)[![IRC channel](http://img.shields.io/badge/IRC-irc.freenode.net%23unshift-00a8ff.svg?style=flat-square)](http://webchat.freenode.net/?channels=unshift)
|
||||
|
||||
Ultron is a high-intelligence robot. It gathers intelligence so it can start
|
||||
improving upon his rudimentary design. It will learn your event emitting
|
||||
patterns and find ways to exterminate them. Allowing you to remove only the
|
||||
event emitters that **you** assigned and not the ones that your users or
|
||||
developers assigned. This can prevent race conditions, memory leaks and even file
|
||||
descriptor leaks from ever happening as you won't remove clean up processes.
|
||||
|
||||
## Installation
|
||||
|
||||
The module is designed to be used in browsers using browserify and in Node.js.
|
||||
You can install the module through the public npm registry by running the
|
||||
following command in CLI:
|
||||
|
||||
```
|
||||
npm install --save ultron
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
In all examples we assume that you've required the library as following:
|
||||
|
||||
```js
|
||||
'use strict';
|
||||
|
||||
var Ultron = require('ultron');
|
||||
```
|
||||
|
||||
Now that we've required the library we can construct our first `Ultron` instance.
|
||||
The constructor requires one argument which should be the `EventEmitter`
|
||||
instance that we need to operate upon. This can be the `EventEmitter` module
|
||||
that ships with Node.js or `EventEmitter3` or anything else as long as it
|
||||
follow the same API and internal structure as these 2. So with that in mind we
|
||||
can create the instance:
|
||||
|
||||
```js
|
||||
//
|
||||
// For the sake of this example we're going to construct an empty EventEmitter
|
||||
//
|
||||
var EventEmitter = require('events').EventEmitter; // or require('eventmitter3');
|
||||
var events = new EventEmitter();
|
||||
|
||||
var ultron = new Ultron(events);
|
||||
```
|
||||
|
||||
You can now use the following API's from the Ultron instance:
|
||||
|
||||
### Ultron.on
|
||||
|
||||
Register a new event listener for the given event. It follows the exact same API
|
||||
as `EventEmitter.on` but it will return itself instead of returning the
|
||||
EventEmitter instance. If you are using EventEmitter3 it also supports the
|
||||
context param:
|
||||
|
||||
```js
|
||||
ultron.on('event-name', handler, { custom: 'function context' });
|
||||
```
|
||||
|
||||
### Ultron.once
|
||||
|
||||
Exactly the same as the [Ultron.on](#ultronon) but it only allows the execution
|
||||
once.
|
||||
|
||||
### Ultron.remove
|
||||
|
||||
This is where all the magic happens and the safe removal starts. This function
|
||||
accepts different argument styles:
|
||||
|
||||
- No arguments, assume that all events need to be removed so it will work as
|
||||
`removeAllListeners()` API.
|
||||
- 1 argument, when it's a string it will be split on ` ` and `,` to create a
|
||||
list of events that need to be cleared.
|
||||
- Multiple arguments, we assume that they are all names of events that need to
|
||||
be cleared.
|
||||
|
||||
```js
|
||||
ultron.remove('foo, bar baz'); // Removes foo, bar and baz.
|
||||
ultron.remove('foo', 'bar', 'baz'); // Removes foo, bar and baz.
|
||||
ultron.remove(); // Removes everything.
|
||||
```
|
||||
|
||||
If you just want to remove a single event listener using a function reference
|
||||
you can still use the EventEmitter's `removeListener(event, fn)` API:
|
||||
|
||||
```js
|
||||
function foo() {}
|
||||
|
||||
ulton.on('foo', foo);
|
||||
events.removeListener('foo', foo);
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
|
@ -1,40 +0,0 @@
|
|||
ALL_TESTS = $(shell find test/ -name '*.test.js')
|
||||
ALL_INTEGRATION = $(shell find test/ -name '*.integration.js')
|
||||
|
||||
all:
|
||||
node-gyp configure build
|
||||
|
||||
clean:
|
||||
node-gyp clean
|
||||
|
||||
run-tests:
|
||||
@./node_modules/.bin/mocha \
|
||||
-t 5000 \
|
||||
-s 2400 \
|
||||
$(TESTFLAGS) \
|
||||
$(TESTS)
|
||||
|
||||
run-integrationtests:
|
||||
@./node_modules/.bin/mocha \
|
||||
-t 5000 \
|
||||
-s 6000 \
|
||||
$(TESTFLAGS) \
|
||||
$(TESTS)
|
||||
|
||||
test:
|
||||
@$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests
|
||||
|
||||
integrationtest:
|
||||
@$(MAKE) NODE_TLS_REJECT_UNAUTHORIZED=0 NODE_PATH=lib TESTS="$(ALL_INTEGRATION)" run-integrationtests
|
||||
|
||||
benchmark:
|
||||
@node bench/sender.benchmark.js
|
||||
@node bench/parser.benchmark.js
|
||||
|
||||
autobahn:
|
||||
@NODE_PATH=lib node test/autobahn.js
|
||||
|
||||
autobahn-server:
|
||||
@NODE_PATH=lib node test/autobahn-server.js
|
||||
|
||||
.PHONY: test
|
|
@ -1,242 +0,0 @@
|
|||
# ws: a node.js websocket library
|
||||
|
||||
[![Build Status](https://travis-ci.org/websockets/ws.svg?branch=master)](https://travis-ci.org/websockets/ws)
|
||||
|
||||
`ws` is a simple to use WebSocket implementation, up-to-date against RFC-6455,
|
||||
and [probably the fastest WebSocket library for node.js][archive].
|
||||
|
||||
Passes the quite extensive Autobahn test suite. See http://websockets.github.com/ws
|
||||
for the full reports.
|
||||
|
||||
## Protocol support
|
||||
|
||||
* **Hixie draft 76** (Old and deprecated, but still in use by Safari and Opera.
|
||||
Added to ws version 0.4.2, but server only. Can be disabled by setting the
|
||||
`disableHixie` option to true.)
|
||||
* **HyBi drafts 07-12** (Use the option `protocolVersion: 8`)
|
||||
* **HyBi drafts 13-17** (Current default, alternatively option `protocolVersion: 13`)
|
||||
|
||||
### Installing
|
||||
|
||||
```
|
||||
npm install --save ws
|
||||
```
|
||||
|
||||
### Opt-in for performance
|
||||
|
||||
There are 2 optional modules that can be installed along side with the `ws`
|
||||
module. These modules are binary addons which improve certain operations, but as
|
||||
they are binary addons they require compilation which can fail if no c++
|
||||
compiler is installed on the host system.
|
||||
|
||||
- `npm install --save bufferutil`: Improves internal buffer operations which
|
||||
allows for faster processing of masked WebSocket frames and general buffer
|
||||
operations.
|
||||
- `npm install --save utf-8-validate`: The specification requires validation of
|
||||
invalid UTF-8 chars, some of these validations could not be done in JavaScript
|
||||
hence the need for a binary addon. In most cases you will already be
|
||||
validating the input that you receive for security purposes leading to double
|
||||
validation. But if you want to be 100% spec conform and fast validation of UTF-8
|
||||
then this module is a must.
|
||||
|
||||
### Sending and receiving text data
|
||||
|
||||
```js
|
||||
var WebSocket = require('ws');
|
||||
var ws = new WebSocket('ws://www.host.com/path');
|
||||
|
||||
ws.on('open', function open() {
|
||||
ws.send('something');
|
||||
});
|
||||
|
||||
ws.on('message', function(data, flags) {
|
||||
// flags.binary will be set if a binary data is received.
|
||||
// flags.masked will be set if the data was masked.
|
||||
});
|
||||
```
|
||||
|
||||
### Sending binary data
|
||||
|
||||
```js
|
||||
var WebSocket = require('ws');
|
||||
var ws = new WebSocket('ws://www.host.com/path');
|
||||
|
||||
ws.on('open', function open() {
|
||||
var array = new Float32Array(5);
|
||||
|
||||
for (var i = 0; i < array.length; ++i) {
|
||||
array[i] = i / 2;
|
||||
}
|
||||
|
||||
ws.send(array, { binary: true, mask: true });
|
||||
});
|
||||
```
|
||||
|
||||
Setting `mask`, as done for the send options above, will cause the data to be
|
||||
masked according to the WebSocket protocol. The same option applies for text
|
||||
data.
|
||||
|
||||
### Server example
|
||||
|
||||
```js
|
||||
var WebSocketServer = require('ws').Server
|
||||
, wss = new WebSocketServer({ port: 8080 });
|
||||
|
||||
wss.on('connection', function connection(ws) {
|
||||
ws.on('message', function incoming(message) {
|
||||
console.log('received: %s', message);
|
||||
});
|
||||
|
||||
ws.send('something');
|
||||
});
|
||||
```
|
||||
|
||||
### ExpressJS example
|
||||
|
||||
```js
|
||||
var server = require('http').createServer()
|
||||
, url = require('url')
|
||||
, WebSocketServer = require('ws').Server
|
||||
, wss = new WebSocketServer({ server: server })
|
||||
, express = require('express')
|
||||
, app = express()
|
||||
, port = 4080;
|
||||
|
||||
app.use(function (req, res) {
|
||||
res.send({ msg: "hello" });
|
||||
});
|
||||
|
||||
wss.on('connection', function connection(ws) {
|
||||
var location = url.parse(ws.upgradeReq.url, true);
|
||||
// you might use location.query.access_token to authenticate or share sessions
|
||||
// or ws.upgradeReq.headers.cookie (see http://stackoverflow.com/a/16395220/151312)
|
||||
|
||||
ws.on('message', function incoming(message) {
|
||||
console.log('received: %s', message);
|
||||
});
|
||||
|
||||
ws.send('something');
|
||||
});
|
||||
|
||||
server.on('request', app);
|
||||
server.listen(port, function () { console.log('Listening on ' + server.address().port) });
|
||||
```
|
||||
|
||||
### Server sending broadcast data
|
||||
|
||||
```js
|
||||
var WebSocketServer = require('ws').Server
|
||||
, wss = new WebSocketServer({ port: 8080 });
|
||||
|
||||
wss.broadcast = function broadcast(data) {
|
||||
wss.clients.forEach(function each(client) {
|
||||
client.send(data);
|
||||
});
|
||||
};
|
||||
```
|
||||
|
||||
### Error handling best practices
|
||||
|
||||
```js
|
||||
// If the WebSocket is closed before the following send is attempted
|
||||
ws.send('something');
|
||||
|
||||
// Errors (both immediate and async write errors) can be detected in an optional
|
||||
// callback. The callback is also the only way of being notified that data has
|
||||
// actually been sent.
|
||||
ws.send('something', function ack(error) {
|
||||
// if error is not defined, the send has been completed,
|
||||
// otherwise the error object will indicate what failed.
|
||||
});
|
||||
|
||||
// Immediate errors can also be handled with try/catch-blocks, but **note** that
|
||||
// since sends are inherently asynchronous, socket write failures will *not* be
|
||||
// captured when this technique is used.
|
||||
try { ws.send('something'); }
|
||||
catch (e) { /* handle error */ }
|
||||
```
|
||||
|
||||
### echo.websocket.org demo
|
||||
|
||||
```js
|
||||
var WebSocket = require('ws');
|
||||
var ws = new WebSocket('ws://echo.websocket.org/', {
|
||||
protocolVersion: 8,
|
||||
origin: 'http://websocket.org'
|
||||
});
|
||||
|
||||
ws.on('open', function open() {
|
||||
console.log('connected');
|
||||
ws.send(Date.now().toString(), {mask: true});
|
||||
});
|
||||
|
||||
ws.on('close', function close() {
|
||||
console.log('disconnected');
|
||||
});
|
||||
|
||||
ws.on('message', function message(data, flags) {
|
||||
console.log('Roundtrip time: ' + (Date.now() - parseInt(data)) + 'ms', flags);
|
||||
|
||||
setTimeout(function timeout() {
|
||||
ws.send(Date.now().toString(), {mask: true});
|
||||
}, 500);
|
||||
});
|
||||
```
|
||||
|
||||
### Browserify users
|
||||
When including ws via a browserify bundle, ws returns global.WebSocket which has slightly different API.
|
||||
You should use the standard WebSockets API instead.
|
||||
|
||||
https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications#Availability_of_WebSockets
|
||||
|
||||
|
||||
### Other examples
|
||||
|
||||
For a full example with a browser client communicating with a ws server, see the
|
||||
examples folder.
|
||||
|
||||
Note that the usage together with Express 3.0 is quite different from Express
|
||||
2.x. The difference is expressed in the two different serverstats-examples.
|
||||
|
||||
Otherwise, see the test cases.
|
||||
|
||||
### Running the tests
|
||||
|
||||
```
|
||||
make test
|
||||
```
|
||||
|
||||
## API Docs
|
||||
|
||||
See [`/doc/ws.md`](https://github.com/websockets/ws/blob/master/doc/ws.md) for Node.js-like docs for the ws classes.
|
||||
|
||||
## Changelog
|
||||
|
||||
We're using the GitHub [`releases`](https://github.com/websockets/ws/releases) for changelog entries.
|
||||
|
||||
## License
|
||||
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
[archive]: http://web.archive.org/web/20130314230536/http://hobbycoding.posterous.com/the-fastest-websocket-module-for-nodejs
|
Loading…
Reference in New Issue