From d68d470bbd9053908f1b72ffa2c2b13b43d491ad Mon Sep 17 00:00:00 2001 From: progre Date: Mon, 3 Nov 2014 17:11:03 +0900 Subject: [PATCH] add socket.io 1.2.0 --- socket.io/legacy/socket.io-0.9-tests.ts | 2 +- socket.io/legacy/socket.io-0.9.d.ts | 4 +- socket.io/socket.io-tests.ts | 145 ++++++++++++++++++++++++ socket.io/socket.io.d.ts | 76 +++++++++++++ 4 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 socket.io/socket.io-tests.ts create mode 100644 socket.io/socket.io.d.ts diff --git a/socket.io/legacy/socket.io-0.9-tests.ts b/socket.io/legacy/socket.io-0.9-tests.ts index 40f0c6b89..0d7e12bb6 100644 --- a/socket.io/legacy/socket.io-0.9-tests.ts +++ b/socket.io/legacy/socket.io-0.9-tests.ts @@ -1,4 +1,4 @@ -import io = require('socket.io'); +import io = require('socket.io-0.9'); var socketManager = io.listen(80); diff --git a/socket.io/legacy/socket.io-0.9.d.ts b/socket.io/legacy/socket.io-0.9.d.ts index 44edbb174..5ead4abde 100644 --- a/socket.io/legacy/socket.io-0.9.d.ts +++ b/socket.io/legacy/socket.io-0.9.d.ts @@ -4,9 +4,9 @@ // Definitions: https://github.com/borisyankov/DefinitelyTyped -/// +/// -declare module "socket.io" { +declare module "socket.io-0.9" { import http = require('http'); export function listen(server: http.Server, options: any, fn: Function): SocketManager; diff --git a/socket.io/socket.io-tests.ts b/socket.io/socket.io-tests.ts new file mode 100644 index 000000000..442e67775 --- /dev/null +++ b/socket.io/socket.io-tests.ts @@ -0,0 +1,145 @@ +import socketIO = require('socket.io'); + +function testUsingWithNodeHTTPServer() { + var app = require('http').createServer(handler); + var io = socketIO(app); + var fs = require('fs'); + + app.listen(80); + + function handler(req: any, res: any) { + fs.readFile(__dirname + '/index.html', + function (err: any, data: any) { + if (err) { + res.writeHead(500); + return res.end('Error loading index.html'); + } + + res.writeHead(200); + res.end(data); + }); + } + + io.on('connection', function (socket) { + socket.emit('news', { hello: 'world' }); + socket.on('my other event', function (data: any) { + console.log(data); + }); + }); +} + +function testUsingWithExpress() { + var app = require('express')(); + var server = require('http').Server(app); + var io = socketIO(server); + + server.listen(80); + + app.get('/', function (req: any, res: any) { + res.sendfile(__dirname + '/index.html'); + }); + + io.on('connection', function (socket) { + socket.emit('news', { hello: 'world' }); + socket.on('my other event', function (data: any) { + console.log(data); + }); + }); +} + +function testUsingWithTheExpressFramework() { + var app = require('express').createServer(); + var io = socketIO(app); + + app.listen(80); + + app.get('/', function (req: any, res: any) { + res.sendfile(__dirname + '/index.html'); + }); + + io.on('connection', function (socket) { + socket.emit('news', { hello: 'world' }); + socket.on('my other event', function (data: any) { + console.log(data); + }); + }); +} + +function testSendingAndReceivingEvents() { + var io = socketIO(80); + + io.on('connection', function (socket) { + io.emit('this', { will: 'be received by everyone' }); + + socket.on('private message', function (from: any, msg: any) { + console.log('I received a private message by ', from, ' saying ', msg); + }); + + socket.on('disconnect', function () { + io.sockets.emit('user disconnected'); + }); + }); +} + +function testRestrictingYourselfToANamespace() { + var io = socketIO.listen(80); + var chat = io + .of('/chat') + .on('connection', function (socket) { + socket.emit('a message', { + that: 'only' + , '/chat': 'will get' + }); + chat.emit('a message', { + everyone: 'in' + , '/chat': 'will get' + }); + }); + + var news = io + .of('/news') + .on('connection', function (socket) { + socket.emit('item', { news: 'item' }); + }); +} + +function testSendingVolatileMessages() { + var io = socketIO.listen(80); + + io.sockets.on('connection', function (socket) { + var tweets = setInterval(function () { + socket.volatile.emit('bieber tweet', {}); + }, 100); + + socket.on('disconnect', function () { + clearInterval(tweets); + }); + }); +} + +function testSendingAndGettingData() { + var io = socketIO.listen(80); + + io.sockets.on('connection', function (socket) { + socket.on('ferret', function (name: any, fn: any) { + fn('woot'); + }); + }); +} + +function testBroadcastingMessages() { + var io = socketIO.listen(80); + + io.sockets.on('connection', function (socket) { + socket.broadcast.emit('user connected'); + }); +} + +function testUsingItJustAsACrossBrowserWebSocket() { + var io = socketIO.listen(80); + + io.sockets.on('connection', function (socket) { + socket.on('message', function () { }); + socket.on('disconnect', function () { }); + }); +} diff --git a/socket.io/socket.io.d.ts b/socket.io/socket.io.d.ts new file mode 100644 index 000000000..ddf7ff11b --- /dev/null +++ b/socket.io/socket.io.d.ts @@ -0,0 +1,76 @@ +// Type definitions for socket.io 1.2.0 +// Project: http://socket.io/ +// Definitions by: PROGRE +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// + +declare module 'socket.io' { + var server: SocketIOStatic; + + export = server; +} + +interface SocketIOStatic { + (): SocketIO.Server; + (srv: any, opts?: any): SocketIO.Server; + (port: number, opts?: any): SocketIO.Server; + (opts: any): SocketIO.Server; + + listen: SocketIOStatic; +} + +declare module SocketIO { + interface Server { + serveClient(v: boolean): Server; + path(v: string): Server; + adapter(v: any): Server; + origins(v: string): Server; + sockets: Namespace; + attach(srv: any, opts: any): Server; + attach(port: number, opts: any): Server; + listen(srv: any, opts: any): Server; + listen(port: number, opts: any): Server; + bind(srv: any): Server; + onconnection(socket: any): Server; + of(nsp: String): Namespace; + emit(name: string, ...args: any[]): Socket; + use(fn: Function): Namespace; + + on(event: 'connection', listener: (socket: Socket) => void): any; + on(event: 'connect', listener: (socket: Socket) => void): any; + on(event: string, listener: Function): any; + } + + interface Namespace extends NodeJS.EventEmitter { + name: String; + connected: { [id: number]: Socket }; + use(fn: Function): Namespace + + on(event: 'connection', listener: (socket: Socket) => void): any; + on(event: 'connect', listener: (socket: Socket) => void): any; + on(event: string, listener: Function): any; + } + + interface Socket { + rooms: string[]; + client: Client; + conn: Socket; + request: any; + id: string; + emit(name: string, ...args: any[]): Socket; + join(name: string, fn?: Function): Socket; + leave(name: string, fn?: Function): Socket; + to(room: string): Socket; + in(room: string): Socket; + + on(event: string, listener: Function): any; + broadcast: Socket; + volatile: Socket; + } + + interface Client { + conn: any; + request: any; + } +}