Skip to content

Commit 46219ac

Browse files
ZetaTwoHSZemi
authored andcommitted
Add optional "participants" parameter to create draft API endpoint
1 parent bc8b2ae commit 46219ac

File tree

4 files changed

+63
-10
lines changed

4 files changed

+63
-10
lines changed

src/DraftServer.ts

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,13 @@ export class DraftServer {
152152
socket.emit('message', 'This draft does not exist.');
153153
return;
154154
}
155+
156+
const draft = draftsStore.getDraftOrThrow(draftId)
157+
if (draft.fixedNames) {
158+
logger.info("Draft is using fixed names. Setting roles but not changing names", {draftId});
159+
}
160+
161+
let assignedName = message.name;
155162
const role: Player = Util.sanitizeRole(message.role);
156163
let assignedRole = Util.getAssignedRole(socket, roomHost, roomGuest);
157164
let hasAssignedRole = false;
@@ -160,14 +167,16 @@ export class DraftServer {
160167
logger.info("Setting player role to 'HOST': %s", message.name, {draftId});
161168
socket.join(roomHost); // async
162169
socket.leave(roomSpec); // async
163-
draftsStore.connectPlayer(draftId, Player.HOST, message.name);
170+
assignedName = draft.fixedNames ? draft.nameHost : message.name;
171+
draftsStore.connectPlayer(draftId, Player.HOST, assignedName);
164172
assignedRole = Player.HOST;
165173
hasAssignedRole = true;
166174
} else if (role === Player.GUEST && !draftsStore.isPlayerConnected(draftId, role)) {
167175
logger.info("Setting player role to 'GUEST': %s", message.name, {draftId});
168176
socket.join(roomGuest); // async
169177
socket.leave(roomSpec); // async
170-
draftsStore.connectPlayer(draftId, Player.GUEST, message.name);
178+
assignedName = draft.fixedNames ? draft.nameGuest : message.name;
179+
draftsStore.connectPlayer(draftId, Player.GUEST, assignedName);
171180
assignedRole = Player.GUEST;
172181
hasAssignedRole = true;
173182
} else {
@@ -187,7 +196,7 @@ export class DraftServer {
187196
.in(roomHost)
188197
.in(roomGuest)
189198
.in(roomSpec)
190-
.emit("player_set_role", {name: message.name, playerType: assignedRole});
199+
.emit("player_set_role", {name: assignedName, playerType: assignedRole});
191200
fn({
192201
...draftsStore.getDraftViewsOrThrow(draftId).getDraftForPlayer(assignedRole),
193202
yourPlayerType: assignedRole,
@@ -201,6 +210,13 @@ export class DraftServer {
201210
socket.emit('message', 'This draft does not exist.');
202211
return;
203212
}
213+
214+
const draft = draftsStore.getDraftOrThrow(draftId)
215+
if(draft.fixedNames) {
216+
logger.info("Draft is using fixed names. Not changing names", {draftId});
217+
return;
218+
}
219+
204220
let assignedRole = Util.getAssignedRole(socket, roomHost, roomGuest);
205221
if (assignedRole === Player.HOST) {
206222
logger.info("Setting HOST player name to: %s", message.name, {draftId});
@@ -400,6 +416,16 @@ export class DraftServer {
400416
const validationErrors = Validator.validatePreset(preset);
401417
if (validationErrors.length === 0) {
402418
draftsStore.initDraft(draftId, preset as Preset);
419+
420+
const nameHost: string | null | undefined = req.body.participants?.host;
421+
const nameGuest: string | null | undefined = req.body.participants?.guest;
422+
if(nameHost && nameGuest) {
423+
logger.info('Setting names to "%s" and "%s"', nameHost, nameGuest, {draftId});
424+
draftsStore.setPlayerName(draftId, Player.HOST, nameHost);
425+
draftsStore.setPlayerName(draftId, Player.GUEST, nameGuest);
426+
draftsStore.setFixedPlayerNames(draftId, true);
427+
}
428+
403429
res.json({status: 'ok', draftId});
404430
logger.info('Created new draft with id: %s', draftId, {draftId});
405431
} else {

src/components/menu/API.tsx

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,13 @@ class API extends React.Component<object, object> {
3030
<dt>Endpoint</dt>
3131
<dd><pre>POST https://aoe2cm.net/api/preset/new</pre></dd>
3232
<dt>Payload</dt>
33-
<dd><pre>A JSON encoded valid <a
34-
href={'https://github.com/SiegeEngineers/aoe2cm2/blob/master/src/models/Preset.ts'}>Preset</a> object.</pre>
33+
<dd>
34+
<pre>{
35+
`{
36+
"preset": `}(A JSON encoded valid <a
37+
href={'https://github.com/SiegeEngineers/aoe2cm2/blob/master/src/models/Preset.ts'}>Preset</a> object.){`
38+
}`}
39+
</pre>
3540
</dd>
3641
<dt>Sample Response</dt>
3742
<dd><pre>{
@@ -83,9 +88,21 @@ class API extends React.Component<object, object> {
8388
<dt>Endpoint</dt>
8489
<dd><pre>POST https://aoe2cm.net/api/draft/new</pre></dd>
8590
<dt>Payload</dt>
86-
<dd><pre>A JSON encoded valid <a
87-
href={'https://github.com/SiegeEngineers/aoe2cm2/blob/master/src/models/Preset.ts'}>Preset</a> object.
88-
</pre>
91+
<dd>
92+
<pre>{
93+
`{
94+
"preset": `}(A JSON encoded valid <a
95+
href={'https://github.com/SiegeEngineers/aoe2cm2/blob/master/src/models/Preset.ts'}>Preset</a> object.){`
96+
}`}
97+
</pre>
98+
You can also set fixed names for Host and Guest by supplying then in the <code>participants</code> key:
99+
<pre>{
100+
`{
101+
"preset": `}(A JSON encoded valid <a
102+
href={'https://github.com/SiegeEngineers/aoe2cm2/blob/master/src/models/Preset.ts'}>Preset</a> object.),{`
103+
"participants": {"host": "Bohemond of Taranto", "guest": "Govind Tai"}
104+
}`
105+
}</pre>
89106
</dd>
90107
<dt>Sample Response</dt>
91108
<dd><pre>{

src/models/Draft.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class Draft implements IDraftState {
1717
public nextAction: number = 0;
1818
public events: DraftEvent[] = [];
1919
public startTimestamp: number;
20+
public fixedNames: boolean = false;
2021

2122
constructor(nameHost: string, nameGuest: string, preset: Preset) {
2223
this.nameHost = nameHost;

src/models/DraftsStore.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,11 @@ export class DraftsStore {
179179
}
180180
}
181181

182+
public setFixedPlayerNames(draftId: string, fixedNames: boolean) {
183+
const draft: Draft = this.getDraftOrThrow(draftId);
184+
draft.fixedNames = fixedNames;
185+
}
186+
182187
public setPlayerName(draftId: string, player: Player, name: string) {
183188
const draft: Draft = this.getDraftOrThrow(draftId);
184189
switch (player) {
@@ -198,13 +203,17 @@ export class DraftsStore {
198203
}
199204
switch (player) {
200205
case Player.HOST:
201-
draft.nameHost = '…';
206+
if (!draft.fixedNames) {
207+
draft.nameHost = '…';
208+
}
202209
draft.hostConnected = false;
203210
draft.hostReady = false;
204211
this.pauseCountdown(draftId);
205212
break;
206213
case Player.GUEST:
207-
draft.nameGuest = '…';
214+
if (!draft.fixedNames) {
215+
draft.nameGuest = '…';
216+
}
208217
draft.guestConnected = false;
209218
draft.guestReady = false;
210219
this.pauseCountdown(draftId);

0 commit comments

Comments
 (0)