forked from ZeroK-RTS/Zero-K-Infrastructure
/
MatchMakerBattle.cs
74 lines (64 loc) · 2.42 KB
/
MatchMakerBattle.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using LobbyClient;
using ZeroKWeb.SpringieInterface;
using ZkData;
namespace ZkLobbyServer
{
public class MatchMakerBattle : ServerBattle
{
public MatchMaker.ProposedBattle Prototype { get; private set; }
public MatchMakerBattle(ZkLobbyServer server, MatchMaker.ProposedBattle bat) : base(server, null)
{
IsMatchMakerBattle = true;
EngineVersion = server.Engine;
ModName = server.Game;
FounderName = "MatchMaker #" + BattleID;
Title = "MatchMaker " + BattleID;
Mode = bat.QueueType.Mode;
MaxPlayers = bat.Size;
Prototype = bat;
foreach (var pe in bat.Players) Users[pe.Name] = new UserBattleStatus(pe.Name, pe.LobbyUser, Guid.NewGuid().ToString());
ValidateAndFillDetails();
}
public override void ValidateBattleStatus(UserBattleStatus ubs)
{
if (Prototype.Players.Any(y => y.Name == ubs.Name))
{
ubs.IsSpectator = false;
ubs.AllyNumber = 0;
}
else
{
ubs.IsSpectator = true;
}
}
protected override async Task OnDedicatedExited(SpringBattleContext springBattleContext)
{
try
{
StopVote();
RunningSince = null;
IsInGame = false;
isZombie = true;
var debriefingMessage = BattleResultHandler.SubmitSpringBattleResult(springBattleContext, server);
debriefingMessage.ChatChannel = "debriefing_" + debriefingMessage.ServerBattleID;
// join people to channel
await
Task.WhenAll(
spring.Context.ActualPlayers.Where(x=>x.Name != null).Select(x => server.ConnectedUsers.Get(x.Name))
.Where(x => x != null)
.Select(x => x.Process(new JoinChannel() { ChannelName = debriefingMessage.ChatChannel })));
await server.Broadcast(Users.Keys, debriefingMessage);
await server.RemoveBattle(this);
}
catch (Exception ex)
{
Trace.TraceError("Error processing battle exited: {0}", ex);
}
}
}
}