├── .gitignore ├── C# Server ├── Program.cs ├── server.csproj └── server.sln ├── LICENSE ├── NodeJsServer ├── package-lock.json └── server.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | -------------------------------------------------------------------------------- /C# Server/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using WebSocketSharp; 3 | using WebSocketSharp.Server; 4 | 5 | 6 | namespace server 7 | { 8 | class Program 9 | { 10 | static void Main() 11 | { 12 | var wssv = new WebSocketServer("ws://127.0.0.1:7799");//监听端口 13 | wssv.Log.Level = LogLevel.Error;//Log级别 14 | wssv.AddWebSocketService("/demo", () => new Demo() { IgnoreExtensions = true });//监听地址 15 | 16 | wssv.Start();//开始监听 17 | 18 | if (wssv.IsListening)//监听后显示一下监听了哪些目录 19 | { 20 | Console.WriteLine("Listening on port {0}, and providing WebSocket services:", wssv.Port); 21 | foreach (var path in wssv.WebSocketServices.Paths) 22 | Console.WriteLine("- {0}", path); 23 | } 24 | 25 | //按任意键结束监听 26 | Console.WriteLine("\nPress Enter key to stop the server..."); 27 | Console.ReadLine(); 28 | 29 | //结束服务 30 | wssv.Stop(); 31 | Console.WriteLine("\nStopped"); 32 | } 33 | 34 | //websocket服务器demo 35 | public class Demo : WebSocketBehavior 36 | { 37 | //连接 38 | protected override void OnOpen() 39 | { 40 | base.OnOpen(); 41 | Console.WriteLine("新增一个连接"); 42 | } 43 | 44 | //错误 45 | protected override void OnError(WebSocketSharp.ErrorEventArgs e) 46 | { 47 | base.OnError(e); 48 | Console.WriteLine("错误:" + e.Message); 49 | } 50 | 51 | //关闭 52 | protected override void OnClose(CloseEventArgs e) 53 | { 54 | base.OnClose(e); 55 | Console.WriteLine("断开一个连接"); 56 | } 57 | 58 | //监听 59 | protected override void OnMessage(MessageEventArgs e) 60 | { 61 | base.OnMessage(e); 62 | 63 | if (e.IsPing) 64 | { 65 | Console.WriteLine("客户端ping了一下"); 66 | } 67 | else 68 | { 69 | Console.WriteLine("收到: " + e.Data); 70 | if (this.State == WebSocketState.Open) 71 | Send("收到: " + e.Data);//发送 72 | } 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /C# Server/server.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /C# Server/server.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.808.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "server", "server.csproj", "{8BF5C49C-4DC0-4B89-B027-05A7A9CE97F7}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {8BF5C49C-4DC0-4B89-B027-05A7A9CE97F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {8BF5C49C-4DC0-4B89-B027-05A7A9CE97F7}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {8BF5C49C-4DC0-4B89-B027-05A7A9CE97F7}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {8BF5C49C-4DC0-4B89-B027-05A7A9CE97F7}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {5E4EA116-1CE7-4FE1-8753-A3684A98CC03} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 JasonXuDeveloper - 傑 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /NodeJsServer/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "abs": { 6 | "version": "1.3.14", 7 | "resolved": "https://registry.npmjs.org/abs/-/abs-1.3.14.tgz", 8 | "integrity": "sha512-PrS26IzwKLWwuURpiKl8wRmJ2KdR/azaVrLEBWG/TALwT20Y7qjtYp1qcMLHA4206hBHY5phv3w4pjf9NPv4Vw==", 9 | "requires": { 10 | "ul": "^5.0.0" 11 | } 12 | }, 13 | "accepts": { 14 | "version": "1.3.7", 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 16 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 17 | "requires": { 18 | "mime-types": "~2.1.24", 19 | "negotiator": "0.6.2" 20 | } 21 | }, 22 | "after": { 23 | "version": "0.8.2", 24 | "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", 25 | "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" 26 | }, 27 | "arraybuffer.slice": { 28 | "version": "0.0.7", 29 | "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", 30 | "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" 31 | }, 32 | "async-limiter": { 33 | "version": "1.0.1", 34 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 35 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" 36 | }, 37 | "backo2": { 38 | "version": "1.0.2", 39 | "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", 40 | "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" 41 | }, 42 | "base64-arraybuffer": { 43 | "version": "0.1.5", 44 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", 45 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" 46 | }, 47 | "base64id": { 48 | "version": "1.0.0", 49 | "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", 50 | "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" 51 | }, 52 | "better-assert": { 53 | "version": "1.0.2", 54 | "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", 55 | "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", 56 | "requires": { 57 | "callsite": "1.0.0" 58 | } 59 | }, 60 | "blob": { 61 | "version": "0.0.5", 62 | "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", 63 | "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" 64 | }, 65 | "callsite": { 66 | "version": "1.0.0", 67 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", 68 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" 69 | }, 70 | "capture-stack-trace": { 71 | "version": "1.0.1", 72 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", 73 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==" 74 | }, 75 | "component-bind": { 76 | "version": "1.0.0", 77 | "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", 78 | "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" 79 | }, 80 | "component-emitter": { 81 | "version": "1.2.1", 82 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 83 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 84 | }, 85 | "component-inherit": { 86 | "version": "0.0.3", 87 | "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", 88 | "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" 89 | }, 90 | "cookie": { 91 | "version": "0.3.1", 92 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 93 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 94 | }, 95 | "core-util-is": { 96 | "version": "1.0.2", 97 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 98 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 99 | }, 100 | "create-error-class": { 101 | "version": "3.0.2", 102 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 103 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 104 | "requires": { 105 | "capture-stack-trace": "^1.0.0" 106 | } 107 | }, 108 | "debug": { 109 | "version": "2.6.9", 110 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 111 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 112 | "requires": { 113 | "ms": "2.0.0" 114 | } 115 | }, 116 | "deep-extend": { 117 | "version": "0.6.0", 118 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 119 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 120 | }, 121 | "deffy": { 122 | "version": "2.2.4", 123 | "resolved": "https://registry.npmjs.org/deffy/-/deffy-2.2.4.tgz", 124 | "integrity": "sha512-pLc9lsbsWjr6RxmJ2OLyvm+9l4j1yK69h+TML/gUit/t3vTijpkNGh8LioaJYTGO7F25m6HZndADcUOo2PsiUg==", 125 | "requires": { 126 | "typpy": "^2.0.0" 127 | } 128 | }, 129 | "duplexer2": { 130 | "version": "0.1.4", 131 | "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", 132 | "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", 133 | "requires": { 134 | "readable-stream": "^2.0.2" 135 | } 136 | }, 137 | "engine.io": { 138 | "version": "3.1.5", 139 | "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", 140 | "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", 141 | "requires": { 142 | "accepts": "~1.3.4", 143 | "base64id": "1.0.0", 144 | "cookie": "0.3.1", 145 | "debug": "~3.1.0", 146 | "engine.io-parser": "~2.1.0", 147 | "uws": "~9.14.0", 148 | "ws": "~3.3.1" 149 | }, 150 | "dependencies": { 151 | "debug": { 152 | "version": "3.1.0", 153 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 154 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 155 | "requires": { 156 | "ms": "2.0.0" 157 | } 158 | } 159 | } 160 | }, 161 | "engine.io-client": { 162 | "version": "3.1.6", 163 | "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", 164 | "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", 165 | "requires": { 166 | "component-emitter": "1.2.1", 167 | "component-inherit": "0.0.3", 168 | "debug": "~3.1.0", 169 | "engine.io-parser": "~2.1.1", 170 | "has-cors": "1.1.0", 171 | "indexof": "0.0.1", 172 | "parseqs": "0.0.5", 173 | "parseuri": "0.0.5", 174 | "ws": "~3.3.1", 175 | "xmlhttprequest-ssl": "~1.5.4", 176 | "yeast": "0.1.2" 177 | }, 178 | "dependencies": { 179 | "debug": { 180 | "version": "3.1.0", 181 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 182 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 183 | "requires": { 184 | "ms": "2.0.0" 185 | } 186 | } 187 | } 188 | }, 189 | "engine.io-parser": { 190 | "version": "2.1.3", 191 | "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", 192 | "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", 193 | "requires": { 194 | "after": "0.8.2", 195 | "arraybuffer.slice": "~0.0.7", 196 | "base64-arraybuffer": "0.1.5", 197 | "blob": "0.0.5", 198 | "has-binary2": "~1.0.2" 199 | } 200 | }, 201 | "err": { 202 | "version": "1.1.1", 203 | "resolved": "https://registry.npmjs.org/err/-/err-1.1.1.tgz", 204 | "integrity": "sha1-65KOLhGjFmSPeCgz0PlyWLpDwvg=", 205 | "requires": { 206 | "typpy": "^2.2.0" 207 | } 208 | }, 209 | "error-ex": { 210 | "version": "1.3.2", 211 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 212 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 213 | "requires": { 214 | "is-arrayish": "^0.2.1" 215 | } 216 | }, 217 | "exec-limiter": { 218 | "version": "3.2.13", 219 | "resolved": "https://registry.npmjs.org/exec-limiter/-/exec-limiter-3.2.13.tgz", 220 | "integrity": "sha512-86Ri699bwiHZVBzTzNj8gspqAhCPchg70zPVWIh3qzUOA1pUMcb272Em3LPk8AE0mS95B9yMJhtqF8vFJAn0dA==", 221 | "requires": { 222 | "limit-it": "^3.0.0", 223 | "typpy": "^2.1.0" 224 | } 225 | }, 226 | "function-bind": { 227 | "version": "1.1.1", 228 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 229 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 230 | }, 231 | "function.name": { 232 | "version": "1.0.13", 233 | "resolved": "https://registry.npmjs.org/function.name/-/function.name-1.0.13.tgz", 234 | "integrity": "sha512-mVrqdoy5npWZyoXl4DxCeuVF6delDcQjVS9aPdvLYlBxtMTZDR2B5GVEQEoM1jJyspCqg3C0v4ABkLE7tp9xFA==", 235 | "requires": { 236 | "noop6": "^1.0.1" 237 | } 238 | }, 239 | "git-package-json": { 240 | "version": "1.4.10", 241 | "resolved": "https://registry.npmjs.org/git-package-json/-/git-package-json-1.4.10.tgz", 242 | "integrity": "sha512-DRAcvbzd2SxGK7w8OgYfvKqhFliT5keX0lmSmVdgScgf1kkl5tbbo7Pam6uYoCa1liOiipKxQZG8quCtGWl/fA==", 243 | "requires": { 244 | "deffy": "^2.2.1", 245 | "err": "^1.1.1", 246 | "gry": "^5.0.0", 247 | "normalize-package-data": "^2.3.5", 248 | "oargv": "^3.4.1", 249 | "one-by-one": "^3.1.0", 250 | "r-json": "^1.2.1", 251 | "r-package-json": "^1.0.0", 252 | "tmp": "0.0.28" 253 | } 254 | }, 255 | "git-source": { 256 | "version": "1.1.10", 257 | "resolved": "https://registry.npmjs.org/git-source/-/git-source-1.1.10.tgz", 258 | "integrity": "sha512-XZZ7ZgnLL35oLgM/xjnLYgtlKlxJG0FohC1kWDvGkU7s1VKGXK0pFF/g1itQEwQ3D+uTQzBnzPi8XbqOv7Wc1Q==", 259 | "requires": { 260 | "git-url-parse": "^5.0.1" 261 | } 262 | }, 263 | "git-up": { 264 | "version": "1.2.1", 265 | "resolved": "https://registry.npmjs.org/git-up/-/git-up-1.2.1.tgz", 266 | "integrity": "sha1-JkSAoAax2EJhrB/gmjpRacV+oZ0=", 267 | "requires": { 268 | "is-ssh": "^1.0.0", 269 | "parse-url": "^1.0.0" 270 | } 271 | }, 272 | "git-url-parse": { 273 | "version": "5.0.1", 274 | "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-5.0.1.tgz", 275 | "integrity": "sha1-/j15xnRq4FBIz6UIyB553du6OEM=", 276 | "requires": { 277 | "git-up": "^1.0.0" 278 | } 279 | }, 280 | "got": { 281 | "version": "5.7.1", 282 | "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", 283 | "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", 284 | "requires": { 285 | "create-error-class": "^3.0.1", 286 | "duplexer2": "^0.1.4", 287 | "is-redirect": "^1.0.0", 288 | "is-retry-allowed": "^1.0.0", 289 | "is-stream": "^1.0.0", 290 | "lowercase-keys": "^1.0.0", 291 | "node-status-codes": "^1.0.0", 292 | "object-assign": "^4.0.1", 293 | "parse-json": "^2.1.0", 294 | "pinkie-promise": "^2.0.0", 295 | "read-all-stream": "^3.0.0", 296 | "readable-stream": "^2.0.5", 297 | "timed-out": "^3.0.0", 298 | "unzip-response": "^1.0.2", 299 | "url-parse-lax": "^1.0.0" 300 | } 301 | }, 302 | "gry": { 303 | "version": "5.0.8", 304 | "resolved": "https://registry.npmjs.org/gry/-/gry-5.0.8.tgz", 305 | "integrity": "sha512-meq9ZjYVpLzZh3ojhTg7IMad9grGsx6rUUKHLqPnhLXzJkRQvEL2U3tQpS5/WentYTtHtxkT3Ew/mb10D6F6/g==", 306 | "requires": { 307 | "abs": "^1.2.1", 308 | "exec-limiter": "^3.0.0", 309 | "one-by-one": "^3.0.0", 310 | "ul": "^5.0.0" 311 | } 312 | }, 313 | "has": { 314 | "version": "1.0.3", 315 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 316 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 317 | "requires": { 318 | "function-bind": "^1.1.1" 319 | } 320 | }, 321 | "has-binary2": { 322 | "version": "1.0.3", 323 | "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", 324 | "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", 325 | "requires": { 326 | "isarray": "2.0.1" 327 | }, 328 | "dependencies": { 329 | "isarray": { 330 | "version": "2.0.1", 331 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 332 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 333 | } 334 | } 335 | }, 336 | "has-cors": { 337 | "version": "1.1.0", 338 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", 339 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" 340 | }, 341 | "hosted-git-info": { 342 | "version": "2.8.8", 343 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", 344 | "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" 345 | }, 346 | "indexof": { 347 | "version": "0.0.1", 348 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", 349 | "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" 350 | }, 351 | "inherits": { 352 | "version": "2.0.4", 353 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 354 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 355 | }, 356 | "ini": { 357 | "version": "1.3.5", 358 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 359 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 360 | }, 361 | "is-arrayish": { 362 | "version": "0.2.1", 363 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 364 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 365 | }, 366 | "is-core-module": { 367 | "version": "2.2.0", 368 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 369 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 370 | "requires": { 371 | "has": "^1.0.3" 372 | } 373 | }, 374 | "is-redirect": { 375 | "version": "1.0.0", 376 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 377 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=" 378 | }, 379 | "is-retry-allowed": { 380 | "version": "1.2.0", 381 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 382 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" 383 | }, 384 | "is-ssh": { 385 | "version": "1.3.2", 386 | "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.2.tgz", 387 | "integrity": "sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ==", 388 | "requires": { 389 | "protocols": "^1.1.0" 390 | } 391 | }, 392 | "is-stream": { 393 | "version": "1.1.0", 394 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 395 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 396 | }, 397 | "isarray": { 398 | "version": "1.0.0", 399 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 400 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 401 | }, 402 | "iterate-object": { 403 | "version": "1.3.4", 404 | "resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.4.tgz", 405 | "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==" 406 | }, 407 | "limit-it": { 408 | "version": "3.2.10", 409 | "resolved": "https://registry.npmjs.org/limit-it/-/limit-it-3.2.10.tgz", 410 | "integrity": "sha512-T0NK99pHnkimldr1WUqvbGV1oWDku/xC9J/OqzJFsV1jeOS6Bwl8W7vkeQIBqwiON9dTALws+rX/XPMQqWerDQ==", 411 | "requires": { 412 | "typpy": "^2.0.0" 413 | } 414 | }, 415 | "lowercase-keys": { 416 | "version": "1.0.1", 417 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 418 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" 419 | }, 420 | "mime-db": { 421 | "version": "1.48.0", 422 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", 423 | "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" 424 | }, 425 | "mime-types": { 426 | "version": "2.1.31", 427 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", 428 | "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", 429 | "requires": { 430 | "mime-db": "1.48.0" 431 | } 432 | }, 433 | "minimist": { 434 | "version": "1.2.5", 435 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 436 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 437 | }, 438 | "ms": { 439 | "version": "2.0.0", 440 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 441 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 442 | }, 443 | "negotiator": { 444 | "version": "0.6.2", 445 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 446 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 447 | }, 448 | "node-status-codes": { 449 | "version": "1.0.0", 450 | "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", 451 | "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=" 452 | }, 453 | "noop6": { 454 | "version": "1.0.9", 455 | "resolved": "https://registry.npmjs.org/noop6/-/noop6-1.0.9.tgz", 456 | "integrity": "sha512-DB3Hwyd89dPr5HqEPg3YHjzvwh/mCqizC1zZ8vyofqc+TQRyPDnT4wgXXbLGF4z9YAzwwTLi8pNLhGqcbSjgkA==" 457 | }, 458 | "normalize-package-data": { 459 | "version": "2.5.0", 460 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 461 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 462 | "requires": { 463 | "hosted-git-info": "^2.1.4", 464 | "resolve": "^1.10.0", 465 | "semver": "2 || 3 || 4 || 5", 466 | "validate-npm-package-license": "^3.0.1" 467 | } 468 | }, 469 | "oargv": { 470 | "version": "3.4.10", 471 | "resolved": "https://registry.npmjs.org/oargv/-/oargv-3.4.10.tgz", 472 | "integrity": "sha512-SXaMANv9sr7S/dP0vj0+Ybipa47UE1ntTWQ2rpPRhC6Bsvfl+Jg03Xif7jfL0sWKOYWK8oPjcZ5eJ82t8AP/8g==", 473 | "requires": { 474 | "iterate-object": "^1.1.0", 475 | "ul": "^5.0.0" 476 | } 477 | }, 478 | "obj-def": { 479 | "version": "1.0.8", 480 | "resolved": "https://registry.npmjs.org/obj-def/-/obj-def-1.0.8.tgz", 481 | "integrity": "sha512-tU8EVxli5fm0BhPjoHoiyKieZBfUYbkxHQatVEyoYkd1oFQdwDx8qMRG2bTcFq1bJi4laE+xJvk6uTKnrxNK3g==", 482 | "requires": { 483 | "deffy": "^2.2.2" 484 | } 485 | }, 486 | "object-assign": { 487 | "version": "4.1.1", 488 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 489 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 490 | }, 491 | "object-component": { 492 | "version": "0.0.3", 493 | "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", 494 | "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" 495 | }, 496 | "one-by-one": { 497 | "version": "3.2.8", 498 | "resolved": "https://registry.npmjs.org/one-by-one/-/one-by-one-3.2.8.tgz", 499 | "integrity": "sha512-HR/pSzZdm46Xqj58K+Bu64kMbSTw8/u77AwWvV+rprO/OsuR++pPlkUJn+SmwqBGRgHKwSKQ974V3uls7crIeQ==", 500 | "requires": { 501 | "obj-def": "^1.0.0", 502 | "sliced": "^1.0.1" 503 | } 504 | }, 505 | "os-tmpdir": { 506 | "version": "1.0.2", 507 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 508 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 509 | }, 510 | "package-json": { 511 | "version": "2.4.0", 512 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz", 513 | "integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=", 514 | "requires": { 515 | "got": "^5.0.0", 516 | "registry-auth-token": "^3.0.1", 517 | "registry-url": "^3.0.3", 518 | "semver": "^5.1.0" 519 | } 520 | }, 521 | "package-json-path": { 522 | "version": "1.0.9", 523 | "resolved": "https://registry.npmjs.org/package-json-path/-/package-json-path-1.0.9.tgz", 524 | "integrity": "sha512-uNu7f6Ef7tQHZRnkyVnCtzdSYVN9uBtge/sG7wzcUaawFWkPYUq67iXxRGrQSg/q0tzxIB8jSyIYUKjG2Jn//A==", 525 | "requires": { 526 | "abs": "^1.2.1" 527 | } 528 | }, 529 | "package.json": { 530 | "version": "2.0.1", 531 | "resolved": "https://registry.npmjs.org/package.json/-/package.json-2.0.1.tgz", 532 | "integrity": "sha1-+IYFnSpJ7QduZIg2ldc7K0bSHW0=", 533 | "requires": { 534 | "git-package-json": "^1.4.0", 535 | "git-source": "^1.1.0", 536 | "package-json": "^2.3.1" 537 | } 538 | }, 539 | "parse-json": { 540 | "version": "2.2.0", 541 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 542 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 543 | "requires": { 544 | "error-ex": "^1.2.0" 545 | } 546 | }, 547 | "parse-url": { 548 | "version": "1.3.11", 549 | "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz", 550 | "integrity": "sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ=", 551 | "requires": { 552 | "is-ssh": "^1.3.0", 553 | "protocols": "^1.4.0" 554 | } 555 | }, 556 | "parseqs": { 557 | "version": "0.0.5", 558 | "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", 559 | "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", 560 | "requires": { 561 | "better-assert": "~1.0.0" 562 | } 563 | }, 564 | "parseuri": { 565 | "version": "0.0.5", 566 | "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", 567 | "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", 568 | "requires": { 569 | "better-assert": "~1.0.0" 570 | } 571 | }, 572 | "path-parse": { 573 | "version": "1.0.6", 574 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 575 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" 576 | }, 577 | "pinkie": { 578 | "version": "2.0.4", 579 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 580 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" 581 | }, 582 | "pinkie-promise": { 583 | "version": "2.0.1", 584 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 585 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 586 | "requires": { 587 | "pinkie": "^2.0.0" 588 | } 589 | }, 590 | "prepend-http": { 591 | "version": "1.0.4", 592 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 593 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" 594 | }, 595 | "process-nextick-args": { 596 | "version": "2.0.1", 597 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 598 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 599 | }, 600 | "protocols": { 601 | "version": "1.4.8", 602 | "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", 603 | "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==" 604 | }, 605 | "r-json": { 606 | "version": "1.2.10", 607 | "resolved": "https://registry.npmjs.org/r-json/-/r-json-1.2.10.tgz", 608 | "integrity": "sha512-hu9vyLjSlHXT62NAS7DjI9WazDlvjN0lgp3n431dCVnirVcLkZIpzSwA3orhZEKzdDD2jqNYI+w0yG0aFf4kpA==" 609 | }, 610 | "r-package-json": { 611 | "version": "1.0.9", 612 | "resolved": "https://registry.npmjs.org/r-package-json/-/r-package-json-1.0.9.tgz", 613 | "integrity": "sha512-G4Vpf1KImWmmPFGdtWQTU0L9zk0SjqEC4qs/jE7AQ+Ylmr5kizMzGeC4wnHp5+ijPqNN+2ZPpvyjVNdN1CDVcg==", 614 | "requires": { 615 | "package-json-path": "^1.0.0", 616 | "r-json": "^1.2.1" 617 | } 618 | }, 619 | "rc": { 620 | "version": "1.2.8", 621 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 622 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 623 | "requires": { 624 | "deep-extend": "^0.6.0", 625 | "ini": "~1.3.0", 626 | "minimist": "^1.2.0", 627 | "strip-json-comments": "~2.0.1" 628 | } 629 | }, 630 | "read-all-stream": { 631 | "version": "3.1.0", 632 | "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", 633 | "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", 634 | "requires": { 635 | "pinkie-promise": "^2.0.0", 636 | "readable-stream": "^2.0.0" 637 | } 638 | }, 639 | "readable-stream": { 640 | "version": "2.3.7", 641 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 642 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 643 | "requires": { 644 | "core-util-is": "~1.0.0", 645 | "inherits": "~2.0.3", 646 | "isarray": "~1.0.0", 647 | "process-nextick-args": "~2.0.0", 648 | "safe-buffer": "~5.1.1", 649 | "string_decoder": "~1.1.1", 650 | "util-deprecate": "~1.0.1" 651 | } 652 | }, 653 | "registry-auth-token": { 654 | "version": "3.4.0", 655 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", 656 | "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", 657 | "requires": { 658 | "rc": "^1.1.6", 659 | "safe-buffer": "^5.0.1" 660 | } 661 | }, 662 | "registry-url": { 663 | "version": "3.1.0", 664 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 665 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", 666 | "requires": { 667 | "rc": "^1.0.1" 668 | } 669 | }, 670 | "resolve": { 671 | "version": "1.19.0", 672 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", 673 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", 674 | "requires": { 675 | "is-core-module": "^2.1.0", 676 | "path-parse": "^1.0.6" 677 | } 678 | }, 679 | "safe-buffer": { 680 | "version": "5.1.2", 681 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 682 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 683 | }, 684 | "semver": { 685 | "version": "5.7.1", 686 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 687 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 688 | }, 689 | "sliced": { 690 | "version": "1.0.1", 691 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 692 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 693 | }, 694 | "socket.io": { 695 | "version": "2.0.1", 696 | "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.1.tgz", 697 | "integrity": "sha1-BkwSUXhGLkd6bfI9L9rRjdHFkU8=", 698 | "requires": { 699 | "debug": "~2.6.6", 700 | "engine.io": "~3.1.0", 701 | "object-assign": "~4.1.1", 702 | "socket.io-adapter": "~1.1.0", 703 | "socket.io-client": "2.0.1", 704 | "socket.io-parser": "~3.1.1" 705 | } 706 | }, 707 | "socket.io-adapter": { 708 | "version": "1.1.2", 709 | "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", 710 | "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" 711 | }, 712 | "socket.io-client": { 713 | "version": "2.0.1", 714 | "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.1.tgz", 715 | "integrity": "sha1-HVL4x0Zgxou2aVlT+hGZcRVfrZM=", 716 | "requires": { 717 | "backo2": "1.0.2", 718 | "base64-arraybuffer": "0.1.5", 719 | "component-bind": "1.0.0", 720 | "component-emitter": "1.2.1", 721 | "debug": "2.6.4", 722 | "engine.io-client": "~3.1.0", 723 | "has-cors": "1.1.0", 724 | "indexof": "0.0.1", 725 | "object-component": "0.0.3", 726 | "parseuri": "0.0.5", 727 | "socket.io-parser": "~3.1.1", 728 | "to-array": "0.1.4" 729 | }, 730 | "dependencies": { 731 | "debug": { 732 | "version": "2.6.4", 733 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz", 734 | "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=", 735 | "requires": { 736 | "ms": "0.7.3" 737 | } 738 | }, 739 | "ms": { 740 | "version": "0.7.3", 741 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz", 742 | "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8=" 743 | } 744 | } 745 | }, 746 | "socket.io-parser": { 747 | "version": "3.1.3", 748 | "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", 749 | "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", 750 | "requires": { 751 | "component-emitter": "1.2.1", 752 | "debug": "~3.1.0", 753 | "has-binary2": "~1.0.2", 754 | "isarray": "2.0.1" 755 | }, 756 | "dependencies": { 757 | "debug": { 758 | "version": "3.1.0", 759 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 760 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 761 | "requires": { 762 | "ms": "2.0.0" 763 | } 764 | }, 765 | "isarray": { 766 | "version": "2.0.1", 767 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", 768 | "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" 769 | } 770 | } 771 | }, 772 | "spdx-correct": { 773 | "version": "3.1.1", 774 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", 775 | "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", 776 | "requires": { 777 | "spdx-expression-parse": "^3.0.0", 778 | "spdx-license-ids": "^3.0.0" 779 | } 780 | }, 781 | "spdx-exceptions": { 782 | "version": "2.3.0", 783 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 784 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 785 | }, 786 | "spdx-expression-parse": { 787 | "version": "3.0.1", 788 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 789 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 790 | "requires": { 791 | "spdx-exceptions": "^2.1.0", 792 | "spdx-license-ids": "^3.0.0" 793 | } 794 | }, 795 | "spdx-license-ids": { 796 | "version": "3.0.7", 797 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", 798 | "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==" 799 | }, 800 | "string_decoder": { 801 | "version": "1.1.1", 802 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 803 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 804 | "requires": { 805 | "safe-buffer": "~5.1.0" 806 | } 807 | }, 808 | "strip-json-comments": { 809 | "version": "2.0.1", 810 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 811 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 812 | }, 813 | "timed-out": { 814 | "version": "3.1.3", 815 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", 816 | "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=" 817 | }, 818 | "tmp": { 819 | "version": "0.0.28", 820 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", 821 | "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", 822 | "requires": { 823 | "os-tmpdir": "~1.0.1" 824 | } 825 | }, 826 | "to-array": { 827 | "version": "0.1.4", 828 | "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", 829 | "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" 830 | }, 831 | "typpy": { 832 | "version": "2.3.12", 833 | "resolved": "https://registry.npmjs.org/typpy/-/typpy-2.3.12.tgz", 834 | "integrity": "sha512-VginyZYxadNyFnB763lvFGNUqsIRtJt2V33pLfdnjRreObbKaxexUC+39EVb3MavWU9ggekvT1ojEU0kvtumfA==", 835 | "requires": { 836 | "function.name": "^1.0.3" 837 | } 838 | }, 839 | "ul": { 840 | "version": "5.2.15", 841 | "resolved": "https://registry.npmjs.org/ul/-/ul-5.2.15.tgz", 842 | "integrity": "sha512-svLEUy8xSCip5IWnsRa0UOg+2zP0Wsj4qlbjTmX6GJSmvKMHADBuHOm1dpNkWqWPIGuVSqzUkV3Cris5JrlTRQ==", 843 | "requires": { 844 | "deffy": "^2.2.2", 845 | "typpy": "^2.3.4" 846 | } 847 | }, 848 | "ultron": { 849 | "version": "1.1.1", 850 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", 851 | "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" 852 | }, 853 | "unzip-response": { 854 | "version": "1.0.2", 855 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", 856 | "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=" 857 | }, 858 | "url-parse-lax": { 859 | "version": "1.0.0", 860 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 861 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 862 | "requires": { 863 | "prepend-http": "^1.0.1" 864 | } 865 | }, 866 | "util-deprecate": { 867 | "version": "1.0.2", 868 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 869 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 870 | }, 871 | "uws": { 872 | "version": "9.14.0", 873 | "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", 874 | "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", 875 | "optional": true 876 | }, 877 | "validate-npm-package-license": { 878 | "version": "3.0.4", 879 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 880 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 881 | "requires": { 882 | "spdx-correct": "^3.0.0", 883 | "spdx-expression-parse": "^3.0.0" 884 | } 885 | }, 886 | "ws": { 887 | "version": "3.3.3", 888 | "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", 889 | "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", 890 | "requires": { 891 | "async-limiter": "~1.0.0", 892 | "safe-buffer": "~5.1.0", 893 | "ultron": "~1.1.0" 894 | } 895 | }, 896 | "xmlhttprequest-ssl": { 897 | "version": "1.5.5", 898 | "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", 899 | "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" 900 | }, 901 | "yeast": { 902 | "version": "0.1.2", 903 | "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", 904 | "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" 905 | } 906 | } 907 | } 908 | -------------------------------------------------------------------------------- /NodeJsServer/server.js: -------------------------------------------------------------------------------- 1 | let server = require('socket.io');//socket 2 | 3 | let io = new server(8001);//创建服务器于7999端口 4 | console.log('服务器已开始运行'); 5 | //开始运行服务器 6 | io.on('connection', async function(socket) { 7 | //连接信息 8 | console.log("有连接了,sid: "+socket.id); 9 | 10 | //监听事件 11 | socket.on('hi',function(){ 12 | //发送事件 13 | socket.emit("hi_back"); 14 | console.log("已发送hi_back"); 15 | }); 16 | 17 | 18 | //发送事件+数据 19 | var player = new Object(); 20 | player.id = 666; 21 | player.name = "傑"; 22 | socket.emit("simulate_auth",player); 23 | }); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JEngine-WebSocket-Server-Demo 2 | 3 | [JEngine](https://github.com/JasonXuDeveloper/JEngine)的WebSocket服务端Demo,[快速开始](#快速开始) 4 | 5 | [JEngine's](https://github.com/JasonXuDeveloper/JEngine) WebSocket server demo, [Get Started](#get-started) 6 | 7 | 8 | 9 | ## 快速开始 10 | 11 | ### C# 服务端 12 | 13 | 1. 进入 ``` C# Server 文件夹``` 14 | 2. 打开 ```server.sln``` 15 | 3. 运行 ```Program.cs``` 16 | 4. 进入使用JEngine的项目的 ```热更工程``` 17 | 5. 调用 ```JWebSocketDemo.RunNormalServerDemo(string ip, int port)```,且 ```ip``` 为 ```127.0.0.1```, ```port``` 为 ```7799``` 18 | 19 | 20 | 21 | ### NodeJs 服务端 22 | 23 | 1. 打开 ```NodeJsServer 文件夹```,在 ```terminal/cmd```中,输入 ```cd path/to/JEngine-WebSocket-Server-Demo``` 24 | 25 | 2. 安装npm包 26 | 27 | ```javascript 28 | npm install package.json 29 | ``` 30 | 31 | 3. 运行 ```server.js``` 32 | 33 | ```javascript 34 | node server.js 35 | ``` 36 | 37 | 4. 进入使用JEngine的项目的 ```热更工程``` 38 | 39 | 5. 调用 ```JWebSocketDemo.RunSocketIOServerDemo(string ip, int port)```,且 ```ip``` 为 ```127.0.0.1```, ```port``` 为 ```8001``` 40 | 41 | 42 | 43 | 44 | 45 | ## Get Started 46 | 47 | ### C# Server 48 | 49 | 1. Open ``` C# Server Folder``` 50 | 2. Open ```server.sln``` 51 | 3. Run ```Program.cs``` 52 | 4. Go to JEngine project, and **in** ```hot update scripts solution``` 53 | 5. Call ```JWebSocketDemo.RunNormalServerDemo(string ip, int port)```, where ```ip``` is ```127.0.0.1```, and ```port``` is ```7799``` 54 | 55 | 56 | 57 | ### NodeJs Server 58 | 59 | 1. Open ```NodeJsServer Folder```, in ```terminal/cmd```, input ```cd path/to/JEngine-WebSocket-Server-Demo``` 60 | 61 | 2. Install npm package 62 | 63 | ```javascript 64 | npm install package.json 65 | ``` 66 | 67 | 3. Run ```server.js``` 68 | 69 | 4. ```javascript 70 | node server.js 71 | ``` 72 | 73 | 5. Go to JEngine project, and **in** ```hot update scripts solution``` 74 | 75 | 6. Call ```JWebSocketDemo.RunSocketIOServerDemo(string ip, int port)```, where ```ip``` is ```127.0.0.1```, and ```port``` is ```8001``` 76 | 77 | --------------------------------------------------------------------------------