UNPKG

lightsword

Version:

LightSword Secure SOCKS5 Proxy / iOS VPN Server

69 lines (53 loc) 1.84 kB
//----------------------------------- // Copyright(c) 2015 Neko //----------------------------------- 'use strict' require('async-node'); require('kinq').enable(); require('../lib/socketEx'); import { LsServer, ServerOptions, UpdateServerOptions } from './server'; import { defaultCipherAlgorithm, defaultServerPort, defaultPassword } from '../common/constant'; export class App { constructor(options?) { let defaultOptions = { cipherAlgorithm: defaultCipherAlgorithm, password: defaultPassword, port: defaultServerPort, timeout: 10, expireTime: undefined, disableSelfProtection: false, speed: NaN }; options = options || defaultOptions; Object.getOwnPropertyNames(defaultOptions).forEach(n => options[n] = options[n] || defaultOptions[n]); let server = new LsServer(options); server.start(); server.once('close', () => App.Users.delete(options.port)); App.Users.set(options.port, server); } public static Users = new Map<number, LsServer>(); public static addUser(options: ServerOptions): boolean { if (App.Users.has(options.port)) return false; new App(options); return true; } public static addUsers(options: ServerOptions[]): boolean { let results = options.map(o => App.addUser(o)); return results.all(r => r === true); } public static updateUser(port: number, options: UpdateServerOptions) { if (!App.Users.has(port)) return false; App.Users.get(port).updateConfiguration(options); return true; } public static removeUser(port) { if (!App.Users.has(port)) return false; let server = App.Users.get(port); server.stop(); return true; } } if (!module.parent) { process.title = 'LightSword Server Debug Mode'; new App({ speed: 20 }); }