@lzpenguin/server 1.0.7 → 1.0.8
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 +20 -29
- package/index.d.ts +5 -4
- package/index.js +24 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -22,7 +22,7 @@ const server = new RiffleServer({
|
|
|
22
22
|
// 监听数据更新
|
|
23
23
|
server.onData((data) => {
|
|
24
24
|
console.log('World:', data.world);
|
|
25
|
-
console.log('Self:', data.self);
|
|
25
|
+
console.log('Self:', data.self); // self 现在直接是公开数据,与 players[i] 结构一致
|
|
26
26
|
console.log('Players:', data.players);
|
|
27
27
|
});
|
|
28
28
|
|
|
@@ -31,8 +31,7 @@ server.init({
|
|
|
31
31
|
hash: 'game-version-hash-123',
|
|
32
32
|
world: { score: 0, level: 1 },
|
|
33
33
|
self: {
|
|
34
|
-
public: { name: 'Player1' }
|
|
35
|
-
private: { health: 100 }
|
|
34
|
+
public: { name: 'Player1', x: 100, y: 100 }
|
|
36
35
|
}
|
|
37
36
|
});
|
|
38
37
|
```
|
|
@@ -62,8 +61,7 @@ server.init({
|
|
|
62
61
|
hash: 'game-version-hash-123', // 必需:游戏版本哈希值
|
|
63
62
|
world: { score: 0, level: 1 }, // 可选:世界初始数据
|
|
64
63
|
self: {
|
|
65
|
-
public: { name: 'Player1' }
|
|
66
|
-
private: { health: 100 } // 可选:私有数据
|
|
64
|
+
public: { name: 'Player1', x: 100, y: 100 } // 可选:公开数据
|
|
67
65
|
}
|
|
68
66
|
});
|
|
69
67
|
```
|
|
@@ -72,16 +70,15 @@ server.init({
|
|
|
72
70
|
```json
|
|
73
71
|
{
|
|
74
72
|
"world": { "score": 0, "level": 1 },
|
|
75
|
-
"self": {
|
|
76
|
-
"public": { "name": "Player1" },
|
|
77
|
-
"private": { "health": 100 }
|
|
78
|
-
},
|
|
73
|
+
"self": { "name": "Player1", "x": 100, "y": 100 },
|
|
79
74
|
"players": [
|
|
80
|
-
{ "name": "Player2", "
|
|
75
|
+
{ "name": "Player2", "x": 10, "y": 20 }
|
|
81
76
|
]
|
|
82
77
|
}
|
|
83
78
|
```
|
|
84
79
|
|
|
80
|
+
**注意:** `self` 和 `players[i]` 现在具有相同的结构,都只包含公开数据。
|
|
81
|
+
|
|
85
82
|
**关于 hash:**
|
|
86
83
|
- **hash 相同**:传入的值不生效,直接返回现有数据
|
|
87
84
|
- **hash 不同**:删除旧服务器并重新创建,使用传入的值初始化数据
|
|
@@ -100,15 +97,14 @@ server.update({ world: { score: 200 } });
|
|
|
100
97
|
// 更新玩家数据
|
|
101
98
|
server.update({
|
|
102
99
|
self: {
|
|
103
|
-
public: {
|
|
104
|
-
private: { health: 90 }
|
|
100
|
+
public: { x: 15, y: 25, rotation: 90 }
|
|
105
101
|
}
|
|
106
102
|
});
|
|
107
103
|
|
|
108
104
|
// 同时更新世界和玩家数据
|
|
109
105
|
server.update({
|
|
110
106
|
world: { score: 200 },
|
|
111
|
-
self: { public: {
|
|
107
|
+
self: { public: { x: 15, y: 25 } }
|
|
112
108
|
});
|
|
113
109
|
```
|
|
114
110
|
|
|
@@ -116,11 +112,8 @@ server.update({
|
|
|
116
112
|
```json
|
|
117
113
|
{
|
|
118
114
|
"world": { "score": 200, "level": 1 },
|
|
119
|
-
"self": {
|
|
120
|
-
|
|
121
|
-
"private": { "health": 90, "mana": 50 }
|
|
122
|
-
},
|
|
123
|
-
"players": [{ "name": "Player2", "position": { "x": 10, "y": 20 } }]
|
|
115
|
+
"self": { "name": "Player1", "x": 15, "y": 25, "rotation": 90 },
|
|
116
|
+
"players": [{ "name": "Player2", "x": 10, "y": 20 }]
|
|
124
117
|
}
|
|
125
118
|
```
|
|
126
119
|
|
|
@@ -145,17 +138,16 @@ unsubscribe();
|
|
|
145
138
|
```json
|
|
146
139
|
{
|
|
147
140
|
"world": { "score": 200, "level": 1 },
|
|
148
|
-
"self": {
|
|
149
|
-
"public": { "name": "Player1", "position": { "x": 15, "y": 25 } },
|
|
150
|
-
"private": { "health": 90, "mana": 50 }
|
|
151
|
-
},
|
|
141
|
+
"self": { "name": "Player1", "x": 15, "y": 25 },
|
|
152
142
|
"players": [
|
|
153
|
-
{ "name": "Player2", "
|
|
154
|
-
{ "name": "Player3", "
|
|
143
|
+
{ "name": "Player2", "x": 10, "y": 20 },
|
|
144
|
+
{ "name": "Player3", "x": 30, "y": 40 }
|
|
155
145
|
]
|
|
156
146
|
}
|
|
157
147
|
```
|
|
158
148
|
|
|
149
|
+
**注意:** `self` 和 `players[i]` 具有相同的数据结构,都只包含公开数据。
|
|
150
|
+
|
|
159
151
|
**推送时机:** init 响应、定时推送(每 0.2 秒)、init/update 后立即推送
|
|
160
152
|
|
|
161
153
|
## 联机游戏示例
|
|
@@ -173,8 +165,8 @@ const server = new RiffleServer({
|
|
|
173
165
|
|
|
174
166
|
// 监听服务器推送,更新游戏状态
|
|
175
167
|
server.onData((data) => {
|
|
176
|
-
//
|
|
177
|
-
const myPosition = data.self
|
|
168
|
+
// 更新自己的位置(self 现在直接是公开数据对象)
|
|
169
|
+
const myPosition = { x: data.self.x, y: data.self.y };
|
|
178
170
|
|
|
179
171
|
// 更新其他玩家列表
|
|
180
172
|
const otherPlayers = data.players || [];
|
|
@@ -193,8 +185,7 @@ server.init({
|
|
|
193
185
|
hash: 'v1.0.0',
|
|
194
186
|
world: { score: 0, level: 1 },
|
|
195
187
|
self: {
|
|
196
|
-
public: { name: 'Player1',
|
|
197
|
-
private: { health: 100 }
|
|
188
|
+
public: { name: 'Player1', x: 0, y: 0 }
|
|
198
189
|
}
|
|
199
190
|
});
|
|
200
191
|
|
|
@@ -202,7 +193,7 @@ server.init({
|
|
|
202
193
|
function movePlayer(x, y) {
|
|
203
194
|
server.update({
|
|
204
195
|
self: {
|
|
205
|
-
public: {
|
|
196
|
+
public: { x, y }
|
|
206
197
|
}
|
|
207
198
|
});
|
|
208
199
|
}
|
package/index.d.ts
CHANGED
|
@@ -19,12 +19,13 @@ export interface RiffleServerOptions {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
22
|
+
* 玩家数据(用于发送 init/update 请求)
|
|
23
|
+
* 注意:此格式仅用于客户端发送数据,服务端返回的 self 已不再使用此结构
|
|
23
24
|
*/
|
|
24
25
|
export interface PlayerSelfData {
|
|
25
26
|
/** 公开数据 */
|
|
26
27
|
public?: Record<string, any>;
|
|
27
|
-
/**
|
|
28
|
+
/** 私有数据(已弃用,服务端不再使用) */
|
|
28
29
|
private?: Record<string, any>;
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -56,8 +57,8 @@ export interface UpdateData {
|
|
|
56
57
|
export interface ServerData {
|
|
57
58
|
/** 世界数据 */
|
|
58
59
|
world: Record<string, any>;
|
|
59
|
-
/**
|
|
60
|
-
self:
|
|
60
|
+
/** 当前玩家数据(仅公开数据,与 players[i] 结构一致) */
|
|
61
|
+
self: Record<string, any>;
|
|
61
62
|
/** 其他玩家列表(仅公开数据) */
|
|
62
63
|
players: Array<Record<string, any>>;
|
|
63
64
|
}
|
package/index.js
CHANGED
|
@@ -44,7 +44,7 @@ if (typeof window !== 'undefined' && window.WebSocket) {
|
|
|
44
44
|
* // 监听服务器推送的最新数据
|
|
45
45
|
* server.onData((data) => {
|
|
46
46
|
* console.log('World:', data.world);
|
|
47
|
-
* console.log('Self:', data.self);
|
|
47
|
+
* console.log('Self:', data.self); // self 现在直接是公开数据,与 players[i] 结构一致
|
|
48
48
|
* console.log('Players:', data.players);
|
|
49
49
|
* });
|
|
50
50
|
*
|
|
@@ -53,8 +53,7 @@ if (typeof window !== 'undefined' && window.WebSocket) {
|
|
|
53
53
|
* hash: 'game-version-hash-123', // 游戏版本哈希值
|
|
54
54
|
* world: { score: 0, level: 1 }, // 世界初始数据(可选)
|
|
55
55
|
* self: {
|
|
56
|
-
* public: { name: 'Player1' }
|
|
57
|
-
* private: { health: 100 } // 私有数据(可选)
|
|
56
|
+
* public: { name: 'Player1', x: 100, y: 100 } // 公开数据(可选)
|
|
58
57
|
* }
|
|
59
58
|
* });
|
|
60
59
|
*
|
|
@@ -62,8 +61,7 @@ if (typeof window !== 'undefined' && window.WebSocket) {
|
|
|
62
61
|
* server.update({
|
|
63
62
|
* world: { score: 200 },
|
|
64
63
|
* self: {
|
|
65
|
-
* public: {
|
|
66
|
-
* private: { health: 90 }
|
|
64
|
+
* public: { x: 15, y: 25, rotation: 90 }
|
|
67
65
|
* }
|
|
68
66
|
* });
|
|
69
67
|
* ```
|
|
@@ -269,15 +267,25 @@ export class RiffleServer {
|
|
|
269
267
|
* @param {string} initData.hash - 游戏版本哈希值(必需)
|
|
270
268
|
* @param {Object} [initData.world] - 世界初始数据(可选)
|
|
271
269
|
* @param {Object} [initData.self] - 玩家初始数据(可选)
|
|
272
|
-
* @param {Object} [initData.self.public] -
|
|
273
|
-
* @param {Object} [initData.self.private] -
|
|
270
|
+
* @param {Object} [initData.self.public] - 公开数据(可选,旧格式)
|
|
271
|
+
* @param {Object} [initData.self.private] - 私有数据(已弃用)
|
|
274
272
|
* @example
|
|
273
|
+
* // 推荐:直接传递公开数据
|
|
275
274
|
* server.init({
|
|
276
275
|
* hash: 'game-version-hash-123',
|
|
277
276
|
* world: { score: 0, level: 1 },
|
|
278
|
-
* self: {
|
|
279
|
-
* public: { name: 'Player1' }
|
|
280
|
-
*
|
|
277
|
+
* self: {
|
|
278
|
+
* public: { name: 'Player1', x: 100, y: 100 }
|
|
279
|
+
* }
|
|
280
|
+
* });
|
|
281
|
+
*
|
|
282
|
+
* @example
|
|
283
|
+
* // 也支持直接传递对象(服务端会将其作为 public 数据处理)
|
|
284
|
+
* server.init({
|
|
285
|
+
* hash: 'game-version-hash-123',
|
|
286
|
+
* world: { score: 0 },
|
|
287
|
+
* self: {
|
|
288
|
+
* public: { name: 'Player1' }
|
|
281
289
|
* }
|
|
282
290
|
* });
|
|
283
291
|
*/
|
|
@@ -322,13 +330,12 @@ export class RiffleServer {
|
|
|
322
330
|
* @param {Object} [updateData.world] - 世界数据(可选)
|
|
323
331
|
* @param {Object} [updateData.self] - 玩家数据(可选)
|
|
324
332
|
* @param {Object} [updateData.self.public] - 公开数据(可选)
|
|
325
|
-
* @param {Object} [updateData.self.private] -
|
|
333
|
+
* @param {Object} [updateData.self.private] - 私有数据(已弃用)
|
|
326
334
|
* @example
|
|
327
335
|
* server.update({
|
|
328
336
|
* world: { score: 200 },
|
|
329
337
|
* self: {
|
|
330
|
-
* public: {
|
|
331
|
-
* private: { health: 90 }
|
|
338
|
+
* public: { x: 15, y: 25, rotation: 90 }
|
|
332
339
|
* }
|
|
333
340
|
* });
|
|
334
341
|
*/
|
|
@@ -343,8 +350,11 @@ export class RiffleServer {
|
|
|
343
350
|
* @example
|
|
344
351
|
* const unsubscribe = server.onData((data) => {
|
|
345
352
|
* console.log('World:', data.world);
|
|
346
|
-
* console.log('Self:', data.self);
|
|
353
|
+
* console.log('Self:', data.self); // self 现在直接是公开数据对象,与 players[i] 结构一致
|
|
347
354
|
* console.log('Players:', data.players);
|
|
355
|
+
*
|
|
356
|
+
* // 例如:data.self = { id: 'abc123', name: 'Player1', x: 100, y: 200 }
|
|
357
|
+
* // 而 data.players[0] 也是相同结构:{ id: 'def456', name: 'Player2', x: 150, y: 250 }
|
|
348
358
|
* });
|
|
349
359
|
*
|
|
350
360
|
* // 取消监听
|