diff --git a/socket.io.users/socket.io.users-tests.ts b/socket.io.users/socket.io.users-tests.ts new file mode 100644 index 000000000..54a047262 --- /dev/null +++ b/socket.io.users/socket.io.users-tests.ts @@ -0,0 +1,58 @@ +/// +/// +/// +/// +var express = require('express'); +var app = express(); +var httpServer = require('http').createServer(app); +var io = require('socket.io')(httpServer); +import ioUsers = require("socket.io.users"); + + + +ioUsers.Session(app, { + "secret": "socket.io.users secret test", + "resave": true, + "saveUninitialized": true +}); + +io.use(ioUsers.Middleware()); + +var users = ioUsers.Users.of("/"); + + +var userDisconnected = (user: ioUsers.User) => { + console.log(user.get("username") + " has disconnected from all web browser windows or/and tabs"); +} + +var setUsername = (user: ioUsers.User, data: any) => { + console.log(user.ip + ' is for first time visiting our site. He/she wants ' + data.username + ' for username'); + user.set("username", data.username); +} + +var joinRoom = (user: ioUsers.User, roomToJoin: string) => { + console.log(user.get("username") + ' joined to ' + roomToJoin); +} + +var leaveRoom = (user: ioUsers.User, roomToJoin: string) => { + console.log(user.get("username") + ' joined to ' + roomToJoin); +} + +var sendMessage = (user: ioUsers.User, data: any) => { + console.log(user.get("username") + 'send ' + data.content + ' to room: ' + data.room); +} + +users.on('disconnected', userDisconnected); +users.on('set username', setUsername); +users.on('join room', joinRoom); //notify other = user joined room or (GLOBAL) room created. +users.on('leave room', leaveRoom); //notify other = user left room or (GLOBAL) room removed. +users.on("send message", sendMessage); //notify other = receive message. + +httpServer.on('uncaughtException', function(err: any) { + console.log(err); +}) + +var httpPort = 80; +httpServer.listen(httpPort, function() { + console.log("Server is running on " + httpPort); +}); diff --git a/socket.io.users/socket.io.users.d.ts b/socket.io.users/socket.io.users.d.ts new file mode 100644 index 000000000..f7ee9b2d8 --- /dev/null +++ b/socket.io.users/socket.io.users.d.ts @@ -0,0 +1,79 @@ +// Type definitions for socket.io.users +// Project: https://github.com/nodets/socket.io.users +// Definitions by: Makis Maropoulos +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/// +/// +/// +/// + +declare module "socket.io.users" { + import { EventEmitter } from 'events'; + import { Application } from "express"; + import { SessionOptions } from "express-session"; + + var CONNECTION_EVENTS: string[]; + var Middleware: () => (socket: SocketIO.Socket, next: () => any) => void; + var Session: (app: Application, options?: SessionOptions) => void; + + type SocketUserList = { + [namespace: string]: Users; + }; + + class Namespaces { + private static socketUsersList: any; + static attach(namespace: string, socketUsersObj: Users): void; + static get(namespace: string): Users; + } + + class User { + id: string | number; + socket: SocketIO.Socket; + sockets: SocketIO.Socket[]; + rooms: string[]; + ip: string; + remoteAddresses: string[]; + store: any; + attach(socket: SocketIO.Socket): void; + detachSocket(socket: SocketIO.Socket): void; + detach(): void; + join(room: string): boolean; + leave(room: string): void; + leaveAll(): void; + /** same as in, checks if this user is inside a room */ + belong(room: string): boolean; + /** same as belong, checks if this user is inside a room */ + in(room: string): boolean; + set(key: string, value: any, callback?: () => void): void; + get: (key: string) => any; + toString(): string; + emit(...args: any[]): void; + to(room: string): SocketIO.Socket; + } + + + class Users extends EventEmitter { + namespace: string; + users: User[]; + constructor(namespace?: string); + static of(namespace?: string): Users; + takeId: (request: any) => string | number; + create(socket: SocketIO.Socket): User; + getById(id: string | number): User; + get(socket: SocketIO.Socket): User; + list(): User[]; + size(): number; + push(_user: User): void; + add(socket: SocketIO.Socket): User; + indexOf(user: User): number; + remove(user: User): void; + room(room: string): User[]; + in(room: string): User[]; + from(room: string): User[]; + update(user: User): void; + emitAll(...args: any[]): void; + registerSocketEvents(currentUser: User): void; + } + +}