@colyseus/uwebsockets-transport 0.15.0-preview.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,16 +1,16 @@
1
1
  <div align="center">
2
2
  <a href="https://github.com/colyseus/colyseus">
3
- <img src="media/header.png?raw=true" />
3
+ <img src="media/logo.svg?raw=true" width="60%" height="300" />
4
4
  </a>
5
5
  <br>
6
6
  <br>
7
7
  <a href="https://npmjs.com/package/colyseus">
8
8
  <img src="https://img.shields.io/npm/dm/colyseus.svg?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfjAgETESWYxR33AAAAtElEQVQoz4WQMQrCQBRE38Z0QoTcwF4Qg1h4BO0sxGOk80iCtViksrIQRRBTewWxMI1mbELYjYu+4rPMDPtn12ChMT3gavb4US5Jym0tcBIta3oDHv4Gwmr7nC4QAxBrCdzM2q6XqUnm9m9r59h7Rc0n2pFv24k4ttGMUXW+sGELTJjSr7QDKuqLS6UKFChVWWuFkZw9Z2AAvAirKT+JTlppIRnd6XgaP4goefI2Shj++OnjB3tBmHYK8z9zAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE5LTAyLTAxVDE4OjE3OjM3KzAxOjAwGQQixQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxOS0wMi0wMVQxODoxNzozNyswMTowMGhZmnkAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAAAElFTkSuQmCC">
9
9
  </a>
10
- <a href="http://discuss.colyseus.io" title="Discuss on Forum">
10
+ <a href="https://github.com/colyseus/colyseus/discussions" title="Discuss on Forum">
11
11
  <img src="https://img.shields.io/badge/discuss-on%20forum-brightgreen.svg?style=for-the-badge&colorB=0069b8&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QAAKqNIzIAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQfjAgETDROxCNUzAAABB0lEQVQoz4WRvyvEARjGP193CnWRH+dHQmGwKZtFGcSmxHAL400GN95ktIpV2dzlLzDJgsGgGNRdDAzoQueS/PgY3HXHyT3T+/Y87/s89UANBKXBdoZo5J6L4K1K5ZxHfnjnlQUf3bKvkgy57a0r9hS3cXfMO1kWJMza++tj3Ac7/LY343x1NA9cNmYMwnSS/SP8JVFuSJmr44iFqvtmpjhmhBCrOOazCesq6H4P3bPBjFoIBydOk2bUA17I080Es+wSZ51B4DIA2zgjSpYcEe44Js01G0XjRcCU+y4ZMrDeLmfc9EnVd5M/o0VMeu6nJZxWJivLmhyw1WHTvrr2b4+2OFqra+ALwouTMDcqmjMAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTktMDItMDFUMTg6MTM6MTkrMDE6MDAC9f6fAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE5LTAyLTAxVDE4OjEzOjE5KzAxOjAwc6hGIwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAAASUVORK5CYII=" alt="Discussion forum" />
12
12
  </a>
13
- <a href="https://discord.gg/RY8rRS7">
13
+ <a href="http://chat.colyseus.io">
14
14
  <img src="https://img.shields.io/discord/525739117951320081.svg?style=for-the-badge&colorB=7581dc&logo=discord&logoColor=white">
15
15
  </a>
16
16
  <h3>
@@ -28,24 +28,14 @@ client-side.
28
28
  The mission of the framework is to be a standard netcode & matchmaking solution
29
29
  for any kind of project you can think of!
30
30
 
31
- You're encouraged to take a look on [some games being developed with
32
- it](https://discuss.colyseus.io/category/5/showcase) and make your own!
33
-
34
- > ⭐️ Enjoying Colyseus? Show your support by starring the project on GitHub ⭐️
35
-
36
- ## What Colyseus provides to you:
31
+ ## Key features:
37
32
 
38
33
  - WebSocket-based communication
39
34
  - Simple API in the server-side and client-side.
40
- - Automatic state synchronization between server and client.
41
- - Matchmaking clients into game sessions
35
+ - Automatic state synchronization from server-to-client (delta compressed)
36
+ - Matchmaking clients into game rooms/sessions
42
37
  - Scale vertically or horizontally
43
38
 
44
- ## What Colyseus won't provide:
45
-
46
- - Game Engine: Colyseus is agnostic of the engine you're using. Need Physics? Add your own logic / package.
47
- - Database: It's up to you to configure and select which database you'd like to use.
48
-
49
39
  See [roadmap](https://github.com/colyseus/colyseus/wiki/Roadmap) for our future plans.
50
40
 
51
41
  # 🚀 Quickstart
@@ -58,29 +48,13 @@ cd my-colyseus-server
58
48
  npm start
59
49
  ```
60
50
 
61
- # 🕹️ Official Client Integration
51
+ # Sponsors
62
52
 
63
- - [JavaScript/TypeScript](https://github.com/colyseus/colyseus.js)
64
- - [Unity](https://github.com/colyseus/colyseus-unity3d) ([unity3d.com](https://unity3d.com/))
65
- - [Defold Engine](https://github.com/colyseus/colyseus-defold) ([defold.com](https://www.defold.com/))
66
- - [Haxe](https://github.com/colyseus/colyseus-hx) ([haxe.org](https://haxe.org/))
67
- - [Construct 3](https://github.com/colyseus/colyseus-construct3) ([construct3.net](https://www.construct.net/))
68
- - [Cocos2d-x](https://github.com/colyseus/colyseus-cocos2d-x) ([cocos2d-x.org](https://cocos2d-x.org/))
69
-
70
- # 🛠️ Tools
71
-
72
- - [@colyseus/social](https://github.com/colyseus/colyseus-social) - Authentication and Social features for Colyseus
73
- - [@colyseus/proxy](https://github.com/colyseus/proxy) - Proxy & Service Discovery for scaling Colyseus
74
- - [@colyseus/monitor](https://github.com/colyseus/colyseus-monitor) - A Web Monitoring Panel for Colyseus
75
- - [@colyseus/loadtest](https://github.com/colyseus/colyseus-loadtest) - Utility tool for load testing Colyseus
76
-
77
- ## Tools made by the community ❤️
53
+ The sustainability of the project relies on **Colyseus Cloud** subscriptions and sponsorships. If you are not using Colyseus Cloud, please consider [sponsoring the project](https://github.com/sponsors/endel) 💖
78
54
 
79
- - [colyseus-hxjs](https://github.com/serjek/colyseus-hxjs): Haxe externs for colyseus server (by [@serjek](https://github.com/serjek))
80
- - [colyseus-kotlin](https://github.com/doorbash/colyseus-kotlin): Client for Java/Kotlin (by [@doorbash](https://github.com/doorbash))
81
- - [Stencyl Extension](http://community.stencyl.com/index.php/topic,61150.0.html): [Stencyl](http://stencyl.com) extension to communicate with a Colyseus server (by [MdotEdot](http://www.stencyl.com/users/index/32424))
82
- - [Colyseus-ObjC](https://github.com/swittk/Colyseus-ObjC): Client for Objective C (by [@swittk](https://github.com/swittk))
83
- - [Colyseus-for-C2](https://github.com/Keevle/Colyseus-for-C2): Client for Construct 2 (by [@Keevle](https://github.com/Keevle))
55
+ <a href="https://colyseus.io/sponsorkit/sponsors.svg">
56
+ <img src="https://github.com/colyseus/colyseus.github.io/blob/master/sponsorkit/sponsors.svg?raw=1" width="100%" />
57
+ </a>
84
58
 
85
59
  # Usage examples
86
60
 
@@ -94,6 +68,17 @@ usage reference with the latest version of Colyseus.
94
68
  - [Collaborative Drawing Prototype](https://colyseus-drawing-prototype.herokuapp.com/) ([source-code](https://github.com/endel/colyseus-collaborative-drawing)) - Collaborative drawing using HTML5 canvas.
95
69
  - (outdated: < v0.8.x): [tanx](https://playcanvas.com/project/367035/overview/tanxcolyseus), [react-example](https://github.com/endel/colyseus-react-example), [LD35 entry: dotower](http://ludumdare.com/compo/ludum-dare-35/?action=preview&uid=50958)
96
70
 
71
+
72
+ ## Tools made by the community ❤️
73
+
74
+ - [godot-colyseus](https://github.com/gsioteam/godot-colyseus): Colyseus SDK for Godot, written in GDScript (by [@gsioteam](https://github.com/gsioteam))
75
+ - [colyseus-ue4](https://github.com/charisma-ai/colyseus-ue4): Colyseus SDK for Unreal Engine 4 (by [@bensalilijames](https://github.com/bensalilijames))
76
+ - [colyseus-hxjs](https://github.com/serjek/colyseus-hxjs): Haxe externs for colyseus server (by [@serjek](https://github.com/serjek))
77
+ - [colyseus-kotlin](https://github.com/doorbash/colyseus-kotlin): Client for Java/Kotlin (by [@doorbash](https://github.com/doorbash))
78
+ - [Stencyl Extension](http://community.stencyl.com/index.php/topic,61150.0.html): [Stencyl](http://stencyl.com) extension to communicate with a Colyseus server (by [MdotEdot](http://www.stencyl.com/users/index/32424))
79
+ - [Colyseus-ObjC](https://github.com/swittk/Colyseus-ObjC): Client for Objective C (by [@swittk](https://github.com/swittk))
80
+ - [Colyseus-for-C2](https://github.com/Keevle/Colyseus-for-C2): Client for Construct 2 (by [@Keevle](https://github.com/Keevle))
81
+
97
82
  # Contributors
98
83
 
99
84
  Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
@@ -103,30 +88,31 @@ Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds
103
88
  <!-- markdownlint-disable -->
104
89
  <table>
105
90
  <tr>
106
- <td align="center"><a href="https://twitter.com/endel"><img src="https://avatars3.githubusercontent.com/u/130494?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Endel Dreyer</b></sub></a><br /><a href="https://github.com/gamestdio/colyseus/commits?author=endel" title="Code">💻</a> <a href="https://github.com/gamestdio/colyseus/commits?author=endel" title="Documentation">📖</a> <a href="#example-endel" title="Examples">💡</a></td>
107
- <td align="center"><a href="https://github.com/fazriz"><img src="https://avatars0.githubusercontent.com/u/2628698?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Fazri Zubair</b></sub></a><br /><a href="#question-fazriz" title="Answering Questions">💬</a> <a href="https://github.com/gamestdio/colyseus/commits?author=fazriz" title="Code">💻</a> <a href="#ideas-fazriz" title="Ideas, Planning, & Feedback">🤔</a> <a href="#business-fazriz" title="Business development">💼</a></td>
108
- <td align="center"><a href="http://seiyria.com"><img src="https://avatars0.githubusercontent.com/u/763609?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kyle J. Kemp</b></sub></a><br /><a href="#question-seiyria" title="Answering Questions">💬</a> <a href="https://github.com/gamestdio/colyseus/issues?q=author%3Aseiyria" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=seiyria" title="Code">💻</a> <a href="#ideas-seiyria" title="Ideas, Planning, & Feedback">🤔</a></td>
109
- <td align="center"><a href="https://github.com/mobyjames/"><img src="https://avatars0.githubusercontent.com/u/1327007?v=4?s=100" width="100px;" alt=""/><br /><sub><b>James Jacoby</b></sub></a><br /><a href="#question-mobyjames" title="Answering Questions">💬</a> <a href="#example-mobyjames" title="Examples">💡</a> <a href="#content-mobyjames" title="Content">🖋</a></td>
110
91
  <td align="center"><a href="https://github.com/halftheopposite/"><img src="https://avatars0.githubusercontent.com/u/5473864?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Aymeric Chauvin</b></sub></a><br /><a href="#question-halftheopposite" title="Answering Questions">💬</a> <a href="#example-halftheopposite" title="Examples">💡</a></td>
111
- <td align="center"><a href="http://wenish.github.io/portfolio/"><img src="https://avatars0.githubusercontent.com/u/18367963?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonas Voland</b></sub></a><br /><a href="#question-Wenish" title="Answering Questions">💬</a> <a href="https://github.com/gamestdio/colyseus/issues?q=author%3AWenish" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=Wenish" title="Code">💻</a> <a href="#ideas-Wenish" title="Ideas, Planning, & Feedback">🤔</a> <a href="#example-Wenish" title="Examples">💡</a></td>
92
+ <td align="center"><a href="https://github.com/brian-hay"><img src="https://avatars2.githubusercontent.com/u/1428000?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Brian Hay</b></sub></a><br /><a href="#content-brian-hay" title="Content">🖋</a></td>
93
+ <td align="center"><a href="https://github.com/damian-pastorini"><img src="https://avatars2.githubusercontent.com/u/1211779?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Damian A. Pastorini</b></sub></a><br /><a href="#question-damian-pastorini" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/commits?author=damian-pastorini" title="Documentation">📖</a> <a href="https://github.com/colyseus/colyseus/issues?q=author%3Adamian-pastorini" title="Bug reports">🐛</a></td>
94
+ <td align="center"><a href="https://github.com/Zielak"><img src="https://avatars0.githubusercontent.com/u/625693?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Darek Greenly</b></sub></a><br /><a href="#question-Zielak" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/issues?q=author%3AZielak" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=Zielak" title="Code">💻</a></td>
95
+ <td align="center"><a href="https://github.com/Vidski"><img src="https://avatars.githubusercontent.com/u/36316706?v=4?s=100" width="100px;" alt=""/><br /><sub><b>David Rydwanski</b></sub></a><br /><a href="#question-Vidski" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/commits?author=Vidski" title="Code">💻</a></td>
112
96
  <td align="center"><a href="https://github.com/drburton"><img src="https://avatars0.githubusercontent.com/u/625595?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dr. Burton</b></sub></a><br /><a href="#mentoring-drburton" title="Mentoring">🧑‍🏫</a></td>
97
+ <td align="center"><a href="https://twitter.com/endel"><img src="https://avatars3.githubusercontent.com/u/130494?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Endel Dreyer</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/commits?author=endel" title="Code">💻</a> <a href="https://github.com/colyseus/colyseus/commits?author=endel" title="Documentation">📖</a> <a href="#example-endel" title="Examples">💡</a></td>
113
98
  </tr>
114
99
  <tr>
115
- <td align="center"><a href="https://github.com/supertommy"><img src="https://avatars0.githubusercontent.com/u/2236153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tommy Leung</b></sub></a><br /><a href="#mentoring-supertommy" title="Mentoring">🧑‍🏫</a></td>
116
- <td align="center"><a href="https://github.com/damian-pastorini"><img src="https://avatars2.githubusercontent.com/u/1211779?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Damian A. Pastorini</b></sub></a><br /><a href="#question-damian-pastorini" title="Answering Questions">💬</a> <a href="https://github.com/gamestdio/colyseus/commits?author=damian-pastorini" title="Documentation">📖</a> <a href="https://github.com/gamestdio/colyseus/issues?q=author%3Adamian-pastorini" title="Bug reports">🐛</a></td>
117
- <td align="center"><a href="https://github.com/LukeWood/"><img src="https://avatars0.githubusercontent.com/u/12191303?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Luke Wood</b></sub></a><br /><a href="#question-LukeWood" title="Answering Questions">💬</a> <a href="https://github.com/gamestdio/colyseus/issues?q=author%3ALukeWood" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=LukeWood" title="Code">💻</a></td>
118
- <td align="center"><a href="https://github.com/doorbash"><img src="https://avatars2.githubusercontent.com/u/5982526?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Milad Doorbash</b></sub></a><br /><a href="https://github.com/gamestdio/colyseus/issues?q=author%3Adoorbash" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=doorbash" title="Code">💻</a></td>
119
- <td align="center"><a href="https://github.com/serjek"><img src="https://avatars2.githubusercontent.com/u/18265157?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sergey</b></sub></a><br /><a href="https://github.com/gamestdio/colyseus/issues?q=author%3Aserjek" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=serjek" title="Code">💻</a></td>
120
- <td align="center"><a href="https://github.com/Zielak"><img src="https://avatars0.githubusercontent.com/u/625693?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Darek Greenly</b></sub></a><br /><a href="#question-Zielak" title="Answering Questions">💬</a> <a href="https://github.com/gamestdio/colyseus/issues?q=author%3AZielak" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=Zielak" title="Code">💻</a></td>
121
- <td align="center"><a href="https://github.com/TinyDobbins"><img src="https://avatars2.githubusercontent.com/u/20824844?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nikita Borisov</b></sub></a><br /><a href="https://github.com/gamestdio/colyseus/issues?q=author%3ATinyDobbins" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=TinyDobbins" title="Code">💻</a> <a href="#business-TinyDobbins" title="Business development">💼</a> <a href="#ideas-TinyDobbins" title="Ideas, Planning, & Feedback">🤔</a></td>
100
+ <td align="center"><a href="https://github.com/enriqueto"><img src="https://avatars2.githubusercontent.com/u/5557196?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Enriqueto</b></sub></a><br /><a href="#business-enriqueto" title="Business development">💼</a></td>
101
+ <td align="center"><a href="https://github.com/fazriz"><img src="https://avatars0.githubusercontent.com/u/2628698?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Fazri Zubair</b></sub></a><br /><a href="#question-fazriz" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/commits?author=fazriz" title="Code">💻</a> <a href="#ideas-fazriz" title="Ideas, Planning, & Feedback">🤔</a> <a href="#business-fazriz" title="Business development">💼</a></td>
102
+ <td align="center"><a href="https://twitter.com/Federkun"><img src="https://avatars2.githubusercontent.com/u/21344385?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Federico</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/issues?q=author%3AFederkun" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=Federkun" title="Code">💻</a></td>
103
+ <td align="center"><a href="https://github.com/mobyjames/"><img src="https://avatars0.githubusercontent.com/u/1327007?v=4?s=100" width="100px;" alt=""/><br /><sub><b>James Jacoby</b></sub></a><br /><a href="#question-mobyjames" title="Answering Questions">💬</a> <a href="#example-mobyjames" title="Examples">💡</a> <a href="#content-mobyjames" title="Content">🖋</a></td>
104
+ <td align="center"><a href="http://wenish.github.io/portfolio/"><img src="https://avatars0.githubusercontent.com/u/18367963?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Jonas Voland</b></sub></a><br /><a href="#question-Wenish" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/issues?q=author%3AWenish" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=Wenish" title="Code">💻</a> <a href="#ideas-Wenish" title="Ideas, Planning, & Feedback">🤔</a> <a href="#example-Wenish" title="Examples">💡</a></td>
105
+ <td align="center"><a href="http://seiyria.com"><img src="https://avatars0.githubusercontent.com/u/763609?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Kyle J. Kemp</b></sub></a><br /><a href="#question-seiyria" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/issues?q=author%3Aseiyria" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=seiyria" title="Code">💻</a> <a href="#ideas-seiyria" title="Ideas, Planning, & Feedback">🤔</a></td>
106
+ <td align="center"><a href="https://github.com/LukeWood/"><img src="https://avatars0.githubusercontent.com/u/12191303?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Luke Wood</b></sub></a><br /><a href="#question-LukeWood" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/issues?q=author%3ALukeWood" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=LukeWood" title="Code">💻</a></td>
122
107
  </tr>
123
108
  <tr>
124
- <td align="center"><a href="https://acemobe.com/"><img src="https://avatars2.githubusercontent.com/u/232101?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Phil Harvey</b></sub></a><br /><a href="https://github.com/gamestdio/colyseus/commits?author=filharvey" title="Documentation">📖</a></td>
125
- <td align="center"><a href="https://github.com/brian-hay"><img src="https://avatars2.githubusercontent.com/u/1428000?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Brian Hay</b></sub></a><br /><a href="#content-brian-hay" title="Content">🖋</a></td>
126
- <td align="center"><a href="https://github.com/enriqueto"><img src="https://avatars2.githubusercontent.com/u/5557196?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Enriqueto</b></sub></a><br /><a href="#business-enriqueto" title="Business development">💼</a></td>
127
- <td align="center"><a href="https://github.com/digimbyte"><img src="https://avatars2.githubusercontent.com/u/6645396?v=4?s=100" width="100px;" alt=""/><br /><sub><b>digimbyte</b></sub></a><br /><a href="https://github.com/gamestdio/colyseus/commits?author=digimbyte" title="Documentation">📖</a></td>
128
- <td align="center"><a href="https://oyed.io"><img src="https://avatars0.githubusercontent.com/u/853683?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tom</b></sub></a><br /><a href="#question-oyed" title="Answering Questions">💬</a> <a href="https://github.com/gamestdio/colyseus/issues?q=author%3Aoyed" title="Bug reports">🐛</a> <a href="#ideas-oyed" title="Ideas, Planning, & Feedback">🤔</a></td>
129
- <td align="center"><a href="https://twitter.com/Federkun"><img src="https://avatars2.githubusercontent.com/u/21344385?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Federico</b></sub></a><br /><a href="https://github.com/gamestdio/colyseus/issues?q=author%3AFederkun" title="Bug reports">🐛</a> <a href="https://github.com/gamestdio/colyseus/commits?author=Federkun" title="Code">💻</a></td>
109
+ <td align="center"><a href="https://github.com/doorbash"><img src="https://avatars2.githubusercontent.com/u/5982526?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Milad Doorbash</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/issues?q=author%3Adoorbash" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=doorbash" title="Code">💻</a></td>
110
+ <td align="center"><a href="https://github.com/TinyDobbins"><img src="https://avatars2.githubusercontent.com/u/20824844?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nikita Borisov</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/issues?q=author%3ATinyDobbins" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=TinyDobbins" title="Code">💻</a> <a href="#business-TinyDobbins" title="Business development">💼</a> <a href="#ideas-TinyDobbins" title="Ideas, Planning, & Feedback">🤔</a></td>
111
+ <td align="center"><a href="https://acemobe.com/"><img src="https://avatars2.githubusercontent.com/u/232101?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Phil Harvey</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/commits?author=filharvey" title="Documentation">📖</a></td>
112
+ <td align="center"><a href="https://github.com/serjek"><img src="https://avatars2.githubusercontent.com/u/18265157?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Sergey</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/issues?q=author%3Aserjek" title="Bug reports">🐛</a> <a href="https://github.com/colyseus/colyseus/commits?author=serjek" title="Code">💻</a></td>
113
+ <td align="center"><a href="https://oyed.io"><img src="https://avatars0.githubusercontent.com/u/853683?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tom</b></sub></a><br /><a href="#question-oyed" title="Answering Questions">💬</a> <a href="https://github.com/colyseus/colyseus/issues?q=author%3Aoyed" title="Bug reports">🐛</a> <a href="#ideas-oyed" title="Ideas, Planning, & Feedback">🤔</a></td>
114
+ <td align="center"><a href="https://github.com/supertommy"><img src="https://avatars0.githubusercontent.com/u/2236153?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tommy Leung</b></sub></a><br /><a href="#mentoring-supertommy" title="Mentoring">🧑‍🏫</a></td>
115
+ <td align="center"><a href="https://github.com/digimbyte"><img src="https://avatars2.githubusercontent.com/u/6645396?v=4?s=100" width="100px;" alt=""/><br /><sub><b>digimbyte</b></sub></a><br /><a href="https://github.com/colyseus/colyseus/commits?author=digimbyte" title="Documentation">📖</a></td>
130
116
  </tr>
131
117
  </table>
132
118
 
@@ -146,10 +132,6 @@ guide](.github/CONTRIBUTING.md) for guidelines about how to proceed. Join us!
146
132
  Everyone interacting in Colyseus and its sub-projects' codebases, issue trackers
147
133
  and chat rooms is expected to follow the [code of conduct](CODE_OF_CONDUCT.md).
148
134
 
149
- # Backers / Supporters via Patreon
150
-
151
- As of February 2021, Colyseus is owned and sponsored by [Lucid Sight](https://www.lucidsight.com/). A warm **thank you** for previous supporters of the project is forever documented in the [early supporters wiki page](https://github.com/colyseus/colyseus/wiki/Early-supporters-(2017-2021)).
152
-
153
135
  # License
154
136
 
155
137
  MIT
package/build/index.js CHANGED
@@ -1,12 +1,32 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var uWebSocketClient = require('./uWebSocketClient.js');
6
- var uWebSocketsTransport = require('./uWebSocketsTransport.js');
7
-
8
-
9
-
10
- exports.uWebSocketClient = uWebSocketClient.uWebSocketClient;
11
- exports.uWebSocketsTransport = uWebSocketsTransport.uWebSocketsTransport;
12
- //# sourceMappingURL=index.js.map
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var src_exports = {};
19
+ __export(src_exports, {
20
+ TransportOptions: () => import_uWebSocketsTransport.TransportOptions,
21
+ uWebSocketClient: () => import_uWebSocketClient.uWebSocketClient,
22
+ uWebSocketsTransport: () => import_uWebSocketsTransport.uWebSocketsTransport
23
+ });
24
+ module.exports = __toCommonJS(src_exports);
25
+ var import_uWebSocketClient = require("./uWebSocketClient");
26
+ var import_uWebSocketsTransport = require("./uWebSocketsTransport");
27
+ // Annotate the CommonJS export names for ESM import in node:
28
+ 0 && (module.exports = {
29
+ TransportOptions,
30
+ uWebSocketClient,
31
+ uWebSocketsTransport
32
+ });
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": ["export { uWebSocketClient } from \"./uWebSocketClient\";\nexport { uWebSocketsTransport, TransportOptions } from \"./uWebSocketsTransport\""],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAiC;AACjC,kCAAuD;",
6
+ "names": []
7
+ }
package/build/index.mjs CHANGED
@@ -1,3 +1,7 @@
1
- export { uWebSocketClient } from './uWebSocketClient.mjs';
2
- export { uWebSocketsTransport } from './uWebSocketsTransport.mjs';
3
- //# sourceMappingURL=index.mjs.map
1
+ import { uWebSocketClient } from "./uWebSocketClient";
2
+ import { uWebSocketsTransport, TransportOptions } from "./uWebSocketsTransport";
3
+ export {
4
+ TransportOptions,
5
+ uWebSocketClient,
6
+ uWebSocketsTransport
7
+ };
@@ -1 +1,7 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": ["export { uWebSocketClient } from \"./uWebSocketClient\";\nexport { uWebSocketsTransport, TransportOptions } from \"./uWebSocketsTransport\""],
5
+ "mappings": "AAAA,SAAS,wBAAwB;AACjC,SAAS,sBAAsB,wBAAwB;",
6
+ "names": []
7
+ }
@@ -3,8 +3,8 @@ import EventEmitter from 'events';
3
3
  import uWebSockets from 'uWebSockets.js';
4
4
  import { Client, ClientState, ISendOptions } from '@colyseus/core';
5
5
  export declare class uWebSocketWrapper extends EventEmitter {
6
- ws: uWebSockets.WebSocket;
7
- constructor(ws: uWebSockets.WebSocket);
6
+ ws: uWebSockets.WebSocket<any>;
7
+ constructor(ws: uWebSockets.WebSocket<any>);
8
8
  }
9
9
  export declare enum ReadyState {
10
10
  CONNECTING = 0,
@@ -14,14 +14,16 @@ export declare enum ReadyState {
14
14
  }
15
15
  export declare class uWebSocketClient implements Client {
16
16
  id: string;
17
- ref: uWebSocketWrapper;
17
+ _ref: uWebSocketWrapper;
18
18
  sessionId: string;
19
19
  state: ClientState;
20
20
  readyState: number;
21
21
  _enqueuedMessages: any[];
22
22
  _afterNextPatchQueue: any;
23
23
  _reconnectionToken: string;
24
- constructor(id: string, ref: uWebSocketWrapper);
24
+ constructor(id: string, _ref: uWebSocketWrapper);
25
+ get ref(): uWebSocketWrapper;
26
+ set ref(_ref: uWebSocketWrapper);
25
27
  sendBytes(type: any, bytes?: any | ISendOptions, options?: ISendOptions): void;
26
28
  send(messageOrType: any, messageOrOptions?: any | ISendOptions, options?: ISendOptions): void;
27
29
  enqueueRaw(data: ArrayLike<number>, options?: ISendOptions): void;
@@ -1,107 +1,131 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var EventEmitter = require('events');
6
- var core = require('@colyseus/core');
7
- var schema = require('@colyseus/schema');
8
-
9
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
-
11
- var EventEmitter__default = /*#__PURE__*/_interopDefaultLegacy(EventEmitter);
12
-
13
- class uWebSocketWrapper extends EventEmitter__default['default'] {
14
- ws;
15
- constructor(ws) {
16
- super();
17
- this.ws = ws;
18
- }
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
21
+ mod
22
+ ));
23
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
24
+ var uWebSocketClient_exports = {};
25
+ __export(uWebSocketClient_exports, {
26
+ ReadyState: () => ReadyState,
27
+ uWebSocketClient: () => uWebSocketClient,
28
+ uWebSocketWrapper: () => uWebSocketWrapper
29
+ });
30
+ module.exports = __toCommonJS(uWebSocketClient_exports);
31
+ var import_events = __toESM(require("events"));
32
+ var import_core = require("@colyseus/core");
33
+ var import_schema = require("@colyseus/schema");
34
+ class uWebSocketWrapper extends import_events.default {
35
+ constructor(ws) {
36
+ super();
37
+ this.ws = ws;
38
+ }
19
39
  }
20
- exports.ReadyState = void 0;
21
- (function (ReadyState) {
22
- ReadyState[ReadyState["CONNECTING"] = 0] = "CONNECTING";
23
- ReadyState[ReadyState["OPEN"] = 1] = "OPEN";
24
- ReadyState[ReadyState["CLOSING"] = 2] = "CLOSING";
25
- ReadyState[ReadyState["CLOSED"] = 3] = "CLOSED";
26
- })(exports.ReadyState || (exports.ReadyState = {}));
40
+ var ReadyState = /* @__PURE__ */ ((ReadyState2) => {
41
+ ReadyState2[ReadyState2["CONNECTING"] = 0] = "CONNECTING";
42
+ ReadyState2[ReadyState2["OPEN"] = 1] = "OPEN";
43
+ ReadyState2[ReadyState2["CLOSING"] = 2] = "CLOSING";
44
+ ReadyState2[ReadyState2["CLOSED"] = 3] = "CLOSED";
45
+ return ReadyState2;
46
+ })(ReadyState || {});
27
47
  class uWebSocketClient {
28
- id;
29
- ref;
30
- sessionId;
31
- state = core.ClientState.JOINING;
32
- readyState = exports.ReadyState.OPEN;
33
- _enqueuedMessages = [];
34
- _afterNextPatchQueue;
35
- _reconnectionToken;
36
- constructor(id, ref) {
37
- this.id = id;
38
- this.ref = ref;
39
- this.sessionId = id;
40
- ref.on('close', () => this.readyState = exports.ReadyState.CLOSED);
41
- }
42
- sendBytes(type, bytes, options) {
43
- core.debugMessage("send bytes(to %s): '%s' -> %j", this.sessionId, type, bytes);
44
- this.enqueueRaw(core.getMessageBytes.raw(core.Protocol.ROOM_DATA_BYTES, type, undefined, bytes), options);
45
- }
46
- send(messageOrType, messageOrOptions, options) {
47
- core.debugMessage("send(to %s): '%s' -> %O", this.sessionId, messageOrType, messageOrOptions);
48
- this.enqueueRaw((messageOrType instanceof schema.Schema)
49
- ? core.getMessageBytes[core.Protocol.ROOM_DATA_SCHEMA](messageOrType)
50
- : core.getMessageBytes.raw(core.Protocol.ROOM_DATA, messageOrType, messageOrOptions), options);
51
- }
52
- enqueueRaw(data, options) {
53
- // use room's afterNextPatch queue
54
- if (options?.afterNextPatch) {
55
- this._afterNextPatchQueue.push([this, arguments]);
56
- return;
57
- }
58
- if (this.state === core.ClientState.JOINING) {
59
- // sending messages during `onJoin`.
60
- // - the client-side cannot register "onMessage" callbacks at this point.
61
- // - enqueue the messages to be send after JOIN_ROOM message has been sent
62
- this._enqueuedMessages.push(data);
63
- return;
64
- }
65
- this.raw(data, options);
48
+ constructor(id, _ref) {
49
+ this.id = id;
50
+ this._ref = _ref;
51
+ this.sessionId = id;
52
+ _ref.on("close", () => this.readyState = 3 /* CLOSED */);
53
+ }
54
+ sessionId;
55
+ state = import_core.ClientState.JOINING;
56
+ readyState = 1 /* OPEN */;
57
+ _enqueuedMessages = [];
58
+ _afterNextPatchQueue;
59
+ _reconnectionToken;
60
+ get ref() {
61
+ return this._ref;
62
+ }
63
+ set ref(_ref) {
64
+ this._ref = _ref;
65
+ this.readyState = 1 /* OPEN */;
66
+ }
67
+ sendBytes(type, bytes, options) {
68
+ (0, import_core.debugMessage)("send bytes(to %s): '%s' -> %j", this.sessionId, type, bytes);
69
+ this.enqueueRaw(
70
+ import_core.getMessageBytes.raw(import_core.Protocol.ROOM_DATA_BYTES, type, void 0, bytes),
71
+ options
72
+ );
73
+ }
74
+ send(messageOrType, messageOrOptions, options) {
75
+ (0, import_core.debugMessage)("send(to %s): '%s' -> %O", this.sessionId, messageOrType, messageOrOptions);
76
+ this.enqueueRaw(
77
+ messageOrType instanceof import_schema.Schema ? import_core.getMessageBytes[import_core.Protocol.ROOM_DATA_SCHEMA](messageOrType) : import_core.getMessageBytes.raw(import_core.Protocol.ROOM_DATA, messageOrType, messageOrOptions),
78
+ options
79
+ );
80
+ }
81
+ enqueueRaw(data, options) {
82
+ if (options?.afterNextPatch) {
83
+ this._afterNextPatchQueue.push([this, arguments]);
84
+ return;
66
85
  }
67
- raw(data, options, cb) {
68
- if (this.readyState !== exports.ReadyState.OPEN) {
69
- core.logger.warn('trying to send data to inactive client', this.sessionId);
70
- return;
71
- }
72
- this.ref.ws.send(new Uint8Array(data), true, false);
86
+ if (this.state === import_core.ClientState.JOINING) {
87
+ this._enqueuedMessages.push(data);
88
+ return;
73
89
  }
74
- error(code, message = '', cb) {
75
- this.raw(core.getMessageBytes[core.Protocol.ERROR](code, message), undefined, cb);
90
+ this.raw(data, options);
91
+ }
92
+ raw(data, options, cb) {
93
+ if (this.readyState !== 1 /* OPEN */) {
94
+ import_core.logger.warn("trying to send data to inactive client", this.sessionId);
95
+ return;
76
96
  }
77
- leave(code, data) {
78
- if (this.readyState !== exports.ReadyState.OPEN) {
79
- // connection already closed. ignore.
80
- return;
81
- }
82
- this.readyState = exports.ReadyState.CLOSING;
83
- if (code !== undefined) {
84
- this.ref.ws.end(code, data);
85
- }
86
- else {
87
- this.ref.ws.close();
88
- }
97
+ this._ref.ws.send(new Uint8Array(data), true, false);
98
+ }
99
+ error(code, message = "", cb) {
100
+ this.raw(import_core.getMessageBytes[import_core.Protocol.ERROR](code, message), void 0, cb);
101
+ }
102
+ leave(code, data) {
103
+ if (this.readyState !== 1 /* OPEN */) {
104
+ return;
89
105
  }
90
- close(code, data) {
91
- core.logger.warn('DEPRECATION WARNING: use client.leave() instead of client.close()');
92
- try {
93
- throw new Error();
94
- }
95
- catch (e) {
96
- core.logger.info(e.stack);
97
- }
98
- this.leave(code, data);
106
+ this.readyState = 2 /* CLOSING */;
107
+ if (code !== void 0) {
108
+ this._ref.ws.end(code, data);
109
+ } else {
110
+ this._ref.ws.close();
99
111
  }
100
- toJSON() {
101
- return { sessionId: this.sessionId, readyState: this.readyState };
112
+ }
113
+ close(code, data) {
114
+ import_core.logger.warn("DEPRECATION WARNING: use client.leave() instead of client.close()");
115
+ try {
116
+ throw new Error();
117
+ } catch (e) {
118
+ import_core.logger.info(e.stack);
102
119
  }
120
+ this.leave(code, data);
121
+ }
122
+ toJSON() {
123
+ return { sessionId: this.sessionId, readyState: this.readyState };
124
+ }
103
125
  }
104
-
105
- exports.uWebSocketClient = uWebSocketClient;
106
- exports.uWebSocketWrapper = uWebSocketWrapper;
107
- //# sourceMappingURL=uWebSocketClient.js.map
126
+ // Annotate the CommonJS export names for ESM import in node:
127
+ 0 && (module.exports = {
128
+ ReadyState,
129
+ uWebSocketClient,
130
+ uWebSocketWrapper
131
+ });
@@ -1 +1,7 @@
1
- {"version":3,"file":"uWebSocketClient.js","sources":["../src/uWebSocketClient.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport uWebSockets from 'uWebSockets.js';\n\nimport { getMessageBytes, Protocol, Client, ClientState, ISendOptions, logger, debugMessage } from '@colyseus/core';\nimport { Schema } from '@colyseus/schema';\n\nexport class uWebSocketWrapper extends EventEmitter {\n constructor(public ws: uWebSockets.WebSocket) {\n super();\n }\n}\n\nexport enum ReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3,\n}\n\nexport class uWebSocketClient implements Client {\n public sessionId: string;\n public state: ClientState = ClientState.JOINING;\n public readyState: number = ReadyState.OPEN;\n public _enqueuedMessages: any[] = [];\n public _afterNextPatchQueue;\n public _reconnectionToken: string;\n\n constructor(\n public id: string,\n public ref: uWebSocketWrapper,\n ) {\n this.sessionId = id;\n\n ref.on('close', () => this.readyState = ReadyState.CLOSED);\n }\n\n public sendBytes(type: any, bytes?: any | ISendOptions, options?: ISendOptions) {\n debugMessage(\"send bytes(to %s): '%s' -> %j\", this.sessionId, type, bytes);\n\n this.enqueueRaw(\n getMessageBytes.raw(Protocol.ROOM_DATA_BYTES, type, undefined, bytes),\n options,\n );\n }\n\n public send(messageOrType: any, messageOrOptions?: any | ISendOptions, options?: ISendOptions) {\n debugMessage(\"send(to %s): '%s' -> %O\", this.sessionId, messageOrType, messageOrOptions);\n\n this.enqueueRaw(\n (messageOrType instanceof Schema)\n ? getMessageBytes[Protocol.ROOM_DATA_SCHEMA](messageOrType)\n : getMessageBytes.raw(Protocol.ROOM_DATA, messageOrType, messageOrOptions),\n options,\n );\n }\n\n public enqueueRaw(data: ArrayLike<number>, options?: ISendOptions) {\n // use room's afterNextPatch queue\n if (options?.afterNextPatch) {\n this._afterNextPatchQueue.push([this, arguments]);\n return;\n }\n\n if (this.state === ClientState.JOINING) {\n // sending messages during `onJoin`.\n // - the client-side cannot register \"onMessage\" callbacks at this point.\n // - enqueue the messages to be send after JOIN_ROOM message has been sent\n this._enqueuedMessages.push(data);\n return;\n }\n\n this.raw(data, options);\n }\n\n public raw(data: ArrayLike<number>, options?: ISendOptions, cb?: (err?: Error) => void) {\n if (this.readyState !== ReadyState.OPEN) {\n logger.warn('trying to send data to inactive client', this.sessionId);\n return;\n }\n\n this.ref.ws.send(new Uint8Array(data), true, false);\n }\n\n public error(code: number, message: string = '', cb?: (err?: Error) => void) {\n this.raw(getMessageBytes[Protocol.ERROR](code, message), undefined, cb);\n }\n\n public leave(code?: number, data?: string) {\n if (this.readyState !== ReadyState.OPEN) {\n // connection already closed. ignore.\n return;\n }\n\n this.readyState = ReadyState.CLOSING;\n\n if (code !== undefined) {\n this.ref.ws.end(code, data);\n\n } else {\n this.ref.ws.close();\n }\n }\n\n public close(code?: number, data?: string) {\n logger.warn('DEPRECATION WARNING: use client.leave() instead of client.close()');\n try {\n throw new Error();\n } catch (e) {\n logger.info(e.stack);\n }\n this.leave(code, data);\n }\n\n public toJSON() {\n return { sessionId: this.sessionId, readyState: this.readyState };\n }\n}\n"],"names":["EventEmitter","ReadyState","ClientState","debugMessage","getMessageBytes","Protocol","Schema","logger"],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/uWebSocketClient.ts"],
4
+ "sourcesContent": ["import EventEmitter from 'events';\nimport uWebSockets from 'uWebSockets.js';\n\nimport { getMessageBytes, Protocol, Client, ClientState, ISendOptions, logger, debugMessage } from '@colyseus/core';\nimport { Schema } from '@colyseus/schema';\n\nexport class uWebSocketWrapper extends EventEmitter {\n constructor(public ws: uWebSockets.WebSocket<any>) {\n super();\n }\n}\n\nexport enum ReadyState {\n CONNECTING = 0,\n OPEN = 1,\n CLOSING = 2,\n CLOSED = 3,\n}\n\nexport class uWebSocketClient implements Client {\n public sessionId: string;\n public state: ClientState = ClientState.JOINING;\n public readyState: number = ReadyState.OPEN;\n public _enqueuedMessages: any[] = [];\n public _afterNextPatchQueue;\n public _reconnectionToken: string;\n\n constructor(\n public id: string,\n public _ref: uWebSocketWrapper,\n ) {\n this.sessionId = id;\n\n _ref.on('close', () => this.readyState = ReadyState.CLOSED);\n }\n\n get ref() { return this._ref; }\n set ref(_ref: uWebSocketWrapper) {\n this._ref = _ref;\n this.readyState = ReadyState.OPEN;\n }\n\n public sendBytes(type: any, bytes?: any | ISendOptions, options?: ISendOptions) {\n debugMessage(\"send bytes(to %s): '%s' -> %j\", this.sessionId, type, bytes);\n\n this.enqueueRaw(\n getMessageBytes.raw(Protocol.ROOM_DATA_BYTES, type, undefined, bytes),\n options,\n );\n }\n\n public send(messageOrType: any, messageOrOptions?: any | ISendOptions, options?: ISendOptions) {\n debugMessage(\"send(to %s): '%s' -> %O\", this.sessionId, messageOrType, messageOrOptions);\n\n this.enqueueRaw(\n (messageOrType instanceof Schema)\n ? getMessageBytes[Protocol.ROOM_DATA_SCHEMA](messageOrType)\n : getMessageBytes.raw(Protocol.ROOM_DATA, messageOrType, messageOrOptions),\n options,\n );\n }\n\n public enqueueRaw(data: ArrayLike<number>, options?: ISendOptions) {\n // use room's afterNextPatch queue\n if (options?.afterNextPatch) {\n this._afterNextPatchQueue.push([this, arguments]);\n return;\n }\n\n if (this.state === ClientState.JOINING) {\n // sending messages during `onJoin`.\n // - the client-side cannot register \"onMessage\" callbacks at this point.\n // - enqueue the messages to be send after JOIN_ROOM message has been sent\n this._enqueuedMessages.push(data);\n return;\n }\n\n this.raw(data, options);\n }\n\n public raw(data: ArrayLike<number>, options?: ISendOptions, cb?: (err?: Error) => void) {\n if (this.readyState !== ReadyState.OPEN) {\n logger.warn('trying to send data to inactive client', this.sessionId);\n return;\n }\n\n this._ref.ws.send(new Uint8Array(data), true, false);\n }\n\n public error(code: number, message: string = '', cb?: (err?: Error) => void) {\n this.raw(getMessageBytes[Protocol.ERROR](code, message), undefined, cb);\n }\n\n public leave(code?: number, data?: string) {\n if (this.readyState !== ReadyState.OPEN) {\n // connection already closed. ignore.\n return;\n }\n\n this.readyState = ReadyState.CLOSING;\n\n if (code !== undefined) {\n this._ref.ws.end(code, data);\n\n } else {\n this._ref.ws.close();\n }\n }\n\n public close(code?: number, data?: string) {\n logger.warn('DEPRECATION WARNING: use client.leave() instead of client.close()');\n try {\n throw new Error();\n } catch (e) {\n logger.info(e.stack);\n }\n this.leave(code, data);\n }\n\n public toJSON() {\n return { sessionId: this.sessionId, readyState: this.readyState };\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAyB;AAGzB,kBAAmG;AACnG,oBAAuB;AAEhB,MAAM,0BAA0B,cAAAA,QAAa;AAAA,EAClD,YAAmB,IAAgC;AACjD,UAAM;AADW;AAAA,EAEnB;AACF;AAEO,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,wBAAA,gBAAa,KAAb;AACA,EAAAA,wBAAA,UAAO,KAAP;AACA,EAAAA,wBAAA,aAAU,KAAV;AACA,EAAAA,wBAAA,YAAS,KAAT;AAJU,SAAAA;AAAA,GAAA;AAOL,MAAM,iBAAmC;AAAA,EAQ9C,YACS,IACA,MACP;AAFO;AACA;AAEP,SAAK,YAAY;AAEjB,SAAK,GAAG,SAAS,MAAM,KAAK,aAAa,cAAiB;AAAA,EAC5D;AAAA,EAdO;AAAA,EACA,QAAqB,wBAAY;AAAA,EACjC,aAAqB;AAAA,EACrB,oBAA2B,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EAWP,IAAI,MAAM;AAAE,WAAO,KAAK;AAAA,EAAM;AAAA,EAC9B,IAAI,IAAI,MAAyB;AAC/B,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,EACpB;AAAA,EAEO,UAAU,MAAW,OAA4B,SAAwB;AAC9E,kCAAa,iCAAiC,KAAK,WAAW,MAAM,KAAK;AAEzE,SAAK;AAAA,MACH,4BAAgB,IAAI,qBAAS,iBAAiB,MAAM,QAAW,KAAK;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAAA,EAEO,KAAK,eAAoB,kBAAuC,SAAwB;AAC7F,kCAAa,2BAA2B,KAAK,WAAW,eAAe,gBAAgB;AAEvF,SAAK;AAAA,MACF,yBAAyB,uBACtB,4BAAgB,qBAAS,kBAAkB,aAAa,IACxD,4BAAgB,IAAI,qBAAS,WAAW,eAAe,gBAAgB;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAAA,EAEO,WAAW,MAAyB,SAAwB;AAEjE,QAAI,SAAS,gBAAgB;AAC3B,WAAK,qBAAqB,KAAK,CAAC,MAAM,SAAS,CAAC;AAChD;AAAA,IACF;AAEA,QAAI,KAAK,UAAU,wBAAY,SAAS;AAItC,WAAK,kBAAkB,KAAK,IAAI;AAChC;AAAA,IACF;AAEA,SAAK,IAAI,MAAM,OAAO;AAAA,EACxB;AAAA,EAEO,IAAI,MAAyB,SAAwB,IAA4B;AACtF,QAAI,KAAK,eAAe,cAAiB;AACvC,yBAAO,KAAK,0CAA0C,KAAK,SAAS;AACpE;AAAA,IACF;AAEA,SAAK,KAAK,GAAG,KAAK,IAAI,WAAW,IAAI,GAAG,MAAM,KAAK;AAAA,EACrD;AAAA,EAEO,MAAM,MAAc,UAAkB,IAAI,IAA4B;AAC3E,SAAK,IAAI,4BAAgB,qBAAS,OAAO,MAAM,OAAO,GAAG,QAAW,EAAE;AAAA,EACxE;AAAA,EAEO,MAAM,MAAe,MAAe;AACzC,QAAI,KAAK,eAAe,cAAiB;AAEvC;AAAA,IACF;AAEA,SAAK,aAAa;AAElB,QAAI,SAAS,QAAW;AACtB,WAAK,KAAK,GAAG,IAAI,MAAM,IAAI;AAAA,IAE7B,OAAO;AACL,WAAK,KAAK,GAAG,MAAM;AAAA,IACrB;AAAA,EACF;AAAA,EAEO,MAAM,MAAe,MAAe;AACzC,uBAAO,KAAK,mEAAmE;AAC/E,QAAI;AACF,YAAM,IAAI,MAAM;AAAA,IAClB,SAAS,GAAP;AACA,yBAAO,KAAK,EAAE,KAAK;AAAA,IACrB;AACA,SAAK,MAAM,MAAM,IAAI;AAAA,EACvB;AAAA,EAEO,SAAS;AACd,WAAO,EAAE,WAAW,KAAK,WAAW,YAAY,KAAK,WAAW;AAAA,EAClE;AACF;",
6
+ "names": ["EventEmitter", "ReadyState"]
7
+ }