Skip to content

Commit b12888d

Browse files
committed
Journal monitor refactoring (to make event definitions more self contained).
1 parent 529460f commit b12888d

13 files changed

Lines changed: 355 additions & 344 deletions

Events/BondAwardedEvent.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using Utilities;
34

45
namespace EddiEvents
@@ -25,5 +26,14 @@ public BondAwardedEvent(DateTime timestamp, string awardingfaction, string victi
2526
this.victimfaction = victimfaction;
2627
this.reward = reward;
2728
}
29+
30+
public static bool Handle ( DateTime timestamp, string line, IDictionary<string, object> data, ref List<Event> events, bool fromLogLoad )
31+
{
32+
var reward = JsonParsing.getLong( data, "Reward" );
33+
var victimFaction = EventParsing.FactionName(data, "VictimFaction");
34+
var awardingFaction = EventParsing.FactionName(data, "AwardingFaction");
35+
events.Add( new BondAwardedEvent( timestamp, awardingFaction, victimFaction, reward ) { raw = line, fromLoad = fromLogLoad } );
36+
return true;
37+
}
2838
}
2939
}

Events/BountyAwardedEvent.cs

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using EddiDataDefinitions;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using Utilities;
56

67
namespace EddiEvents
@@ -60,5 +61,56 @@ public BountyAwardedEvent(DateTime timestamp, string target, string target_local
6061
this.rewards = rewards;
6162
this.shared = shared;
6263
}
64+
65+
public static bool Handle ( DateTime timestamp, string line, IDictionary<string, object> data, ref List<Event> events, bool fromLogLoad )
66+
{
67+
var target = JsonParsing.getString(data, "Target");
68+
var target_localised = JsonParsing.getString( data, "Target_Localised" );
69+
var victimName = JsonParsing.getString(data, "PilotName_Localised");
70+
var victimFaction = EventParsing.FactionName(data, "VictimFaction");
71+
72+
data.TryGetValue( "SharedWithOthers", out var val );
73+
var shared = val != null && (long)val == 1;
74+
75+
long reward;
76+
var rewards = new List<Reward>();
77+
78+
if ( data.ContainsKey( "Reward" ) )
79+
{
80+
// Old-style
81+
reward = JsonParsing.getLong( data, "Reward" );
82+
if ( reward == 0 )
83+
{
84+
// 0-credit reward; ignore
85+
return true;
86+
}
87+
var factionName = EventParsing.FactionName(data, "Faction");
88+
rewards.Add( new Reward( factionName, reward ) );
89+
}
90+
else
91+
{
92+
reward = JsonParsing.getLong( data, "TotalReward" );
93+
if ( reward == 0 )
94+
{
95+
// 0-credit reward; ignore
96+
return true;
97+
}
98+
// Obtain list of rewards
99+
data.TryGetValue( "Rewards", out val );
100+
var rewardsData = (List<object>)val;
101+
if ( rewardsData != null )
102+
{
103+
foreach ( var rewardData in rewardsData.Cast<IDictionary<string, object>>() )
104+
{
105+
var factionName = EventParsing.FactionName(rewardData, "Faction");
106+
var factionReward = JsonParsing.getLong( rewardData, "Reward" );
107+
rewards.Add( new Reward( factionName, factionReward ) );
108+
}
109+
}
110+
}
111+
112+
events.Add( new BountyAwardedEvent( timestamp, target, target_localised, victimName, victimFaction, reward, rewards, shared ) { raw = line, fromLoad = fromLogLoad } );
113+
return true;
114+
}
63115
}
64116
}

Events/DiedEvent.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using EddiDataDefinitions;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using Utilities;
56

67
namespace EddiEvents
@@ -19,5 +20,47 @@ public DiedEvent(DateTime timestamp, List<Killer> killers) : base(timestamp, NAM
1920
{
2021
this.killers = killers;
2122
}
23+
24+
public static bool Handle ( DateTime timestamp, string line, IDictionary<string, object> data, ref List<Event> events, bool fromLogLoad )
25+
{
26+
Killer parseKiller ( IDictionary<string, object> killerData, bool singleKiller )
27+
{
28+
// Property names differ if there is a single killer vs. multiple killers
29+
var name = JsonParsing.getString(killerData, singleKiller ? "KillerName" : "Name");
30+
if ( !string.IsNullOrEmpty( JsonParsing.getString( data, singleKiller ? "KillerName_Localised" : "Name_Localised" ) ) )
31+
{
32+
// This is an NPC with a symbolic name
33+
name = NpcAuthorityShip.EDNameExists( name )
34+
? NpcAuthorityShip.FromEDName( name )?.localizedName
35+
: JsonParsing.getString( data, singleKiller ? "KillerName_Localised" : "Name_Localised" );
36+
}
37+
38+
var equipment = JsonParsing.getString(killerData, singleKiller ? "KillerShip" : "Ship"); // May be a ship, a suit, etc.
39+
var rating = CombatRating.FromEDName(JsonParsing.getString(killerData, singleKiller ? "KillerRank" : "Rank"));
40+
return new Killer( name, equipment, rating );
41+
}
42+
43+
var killers = new List<Killer>();
44+
if ( data.ContainsKey( "KillerName" ) )
45+
{
46+
// Single killer
47+
killers.Add( parseKiller( data, true ) );
48+
}
49+
if ( data.ContainsKey( "killers" ) )
50+
{
51+
// Multiple killers
52+
data.TryGetValue( "Killers", out var val );
53+
var killersData = (List<object>)val;
54+
if ( killersData != null )
55+
{
56+
foreach ( var killerData in killersData.Cast<IDictionary<string, object>>() )
57+
{
58+
killers.Add( parseKiller( killerData, false ) );
59+
}
60+
}
61+
}
62+
events.Add( new DiedEvent( timestamp, killers ) { raw = line, fromLoad = fromLogLoad } );
63+
return true;
64+
}
2265
}
2366
}

Events/HeatDamageEvent.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using Utilities;
34

45
namespace EddiEvents
@@ -12,5 +13,12 @@ public class HeatDamageEvent : Event
1213

1314
public HeatDamageEvent(DateTime timestamp) : base(timestamp, NAME)
1415
{ }
16+
17+
public static bool Handle ( DateTime timestamp, string line, ref List<Event> events, bool fromLogLoad )
18+
{
19+
if ( fromLogLoad ) { return true; } // Skip handling this during log loading
20+
events.Add( new HeatDamageEvent( timestamp ) { raw = line, fromLoad = false } );
21+
return true;
22+
}
1523
}
1624
}

Events/HeatWarningEvent.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using Utilities;
34

45
namespace EddiEvents
@@ -12,5 +13,12 @@ public class HeatWarningEvent : Event
1213

1314
public HeatWarningEvent(DateTime timestamp) : base(timestamp, NAME)
1415
{ }
16+
17+
public static bool Handle ( DateTime timestamp, string line, ref List<Event> events, bool fromLogLoad )
18+
{
19+
if ( fromLogLoad ) { return true; } // Skip handling this during log loading
20+
events.Add( new HeatWarningEvent( timestamp ) { raw = line, fromLoad = false } );
21+
return true;
22+
}
1523
}
1624
}

Events/HullDamageEvent.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using Utilities;
34

45
namespace EddiEvents
@@ -25,5 +26,32 @@ public HullDamagedEvent(DateTime timestamp, string vehicle, bool? piloted, decim
2526
this.piloted = piloted;
2627
this.health = health;
2728
}
29+
30+
public static bool Handle ( DateTime timestamp, string currentVehicle, string line, IDictionary<string, object> data, ref List<Event> events, bool fromLogLoad )
31+
{
32+
var health = EventParsing.sensibleHealth(JsonParsing.getDecimal(data, "Health") * 100);
33+
var piloted = JsonParsing.getOptionalBool(data, "PlayerPilot");
34+
var fighter = JsonParsing.getOptionalBool(data, "Fighter");
35+
36+
var vehicle = currentVehicle;
37+
if ( piloted == false )
38+
{
39+
if ( fighter == true )
40+
{
41+
vehicle = Constants.VEHICLE_FIGHTER;
42+
}
43+
else if ( currentVehicle == Constants.VEHICLE_SRV )
44+
{
45+
vehicle = Constants.VEHICLE_SHIP;
46+
}
47+
else if ( currentVehicle == Constants.VEHICLE_SHIP )
48+
{
49+
vehicle = Constants.VEHICLE_SRV;
50+
}
51+
}
52+
53+
events.Add( new HullDamagedEvent( timestamp, vehicle, piloted, health ) { raw = line, fromLoad = fromLogLoad } );
54+
return true;
55+
}
2856
}
2957
}

Events/KilledEvent.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using EddiDataDefinitions;
22
using System;
3+
using System.Collections.Generic;
34
using Utilities;
45

56
namespace EddiEvents
@@ -22,5 +23,17 @@ public KilledEvent(DateTime timestamp, string victim, CombatRating rating) : bas
2223
this.victim = victim;
2324
this.rating = rating?.localizedName;
2425
}
26+
27+
public static bool Handle ( DateTime timestamp, string line, IDictionary<string, object> data, ref List<Event> events, bool fromLogLoad )
28+
{
29+
if ( fromLogLoad ) { return true; } // Skip handling this during log loading
30+
31+
var victim = JsonParsing.getString(data, "Victim");
32+
data.TryGetValue( "CombatRank", out var val );
33+
var rating = val == null ? null : CombatRating.FromRank((int)(long)val);
34+
35+
events.Add( new KilledEvent( timestamp, victim, rating ) { raw = line, fromLoad = false } );
36+
return true;
37+
}
2538
}
2639
}

Events/ShipInterdictedEvent.cs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using EddiDataDefinitions;
22
using System;
3+
using System.Collections.Generic;
34
using Utilities;
45

56
namespace EddiEvents
@@ -46,5 +47,41 @@ public ShipInterdictedEvent(DateTime timestamp, bool succeeded, bool submitted,
4647
this.faction = faction;
4748
this.power = power;
4849
}
50+
51+
public static bool Handle ( DateTime timestamp, string edType, string line, IDictionary<string, object> data, ref List<Event> events, bool fromLogLoad )
52+
{
53+
if ( fromLogLoad ) { return true; } // Skip handling this during log loading
54+
55+
var succeded = edType == "Interdicted";
56+
var submitted = JsonParsing.getOptionalBool( data, "Submitted" ) ?? false;
57+
var interdictor = JsonParsing.getString( data, "Interdictor" );
58+
var iscommander = JsonParsing.getOptionalBool( data, "IsPlayer" ) ?? false;
59+
var isThargoid = JsonParsing.getOptionalBool( data, "isThargoid" ) ?? false;
60+
61+
if ( !string.IsNullOrEmpty( JsonParsing.getString( data, "Interdictor_Localised" ) ) )
62+
{
63+
// This is an NPC with a symbolic name
64+
interdictor = NpcAuthorityShip.EDNameExists( interdictor )
65+
? NpcAuthorityShip.FromEDName( interdictor )?.localizedName
66+
: JsonParsing.getString( data, "Interdictor_Localised" );
67+
}
68+
else if ( isThargoid )
69+
{
70+
interdictor = NpcAuthorityShip.Thargoid.localizedName;
71+
}
72+
else if ( string.IsNullOrEmpty( interdictor ) && !data.ContainsKey( "Interdictor" ) )
73+
{
74+
// This matches the pattern for an unknown ship interdiction attempt
75+
interdictor = NpcAuthorityShip.UNKNOWN.localizedName;
76+
}
77+
78+
var rank = JsonParsing.getOptionalInt( data, "CombatRank" );
79+
var rating = rank is null ? null : CombatRating.FromRank( (int)rank );
80+
var faction = EventParsing.FactionName( data, "Faction" );
81+
var power = JsonParsing.getString( data, "Power" );
82+
83+
events.Add( new ShipInterdictedEvent( timestamp, succeded, submitted, iscommander, isThargoid, interdictor, rating, faction, power ) { raw = line, fromLoad = false } );
84+
return true;
85+
}
4986
}
5087
}

Events/ShipInterdictionEvent.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using EddiDataDefinitions;
22
using System;
3+
using System.Collections.Generic;
34
using Utilities;
45

56
namespace EddiEvents
@@ -38,5 +39,29 @@ public ShipInterdictionEvent(DateTime timestamp, bool succeeded, bool iscommande
3839
this.faction = faction;
3940
this.power = power;
4041
}
42+
43+
public static bool Handle ( DateTime timestamp, string line, IDictionary<string, object> data, ref List<Event> events, bool fromLogLoad )
44+
{
45+
if ( fromLogLoad ) { return true; } // Skip handling this during log loading
46+
47+
var success = JsonParsing.getBool(data, "Success");
48+
var interdictee = JsonParsing.getString(data, "Interdicted");
49+
var iscommander = JsonParsing.getBool(data, "IsPlayer");
50+
data.TryGetValue( "CombatRank", out var val );
51+
var rating = val == null ? null : CombatRating.FromRank( Convert.ToInt32( val ) );
52+
var faction = EventParsing.FactionName(data, "Faction");
53+
var power = JsonParsing.getString(data, "Power");
54+
55+
if ( !string.IsNullOrEmpty( JsonParsing.getString( data, "Interdicted_Localised" ) ) )
56+
{
57+
// This is an NPC with a symbolic name
58+
interdictee = NpcAuthorityShip.EDNameExists( interdictee )
59+
? NpcAuthorityShip.FromEDName( interdictee )?.localizedName
60+
: JsonParsing.getString( data, "Interdicted_Localised" );
61+
}
62+
63+
events.Add( new ShipInterdictionEvent( timestamp, success, iscommander, interdictee, rating, faction, power ) { raw = line, fromLoad = false } );
64+
return true;
65+
}
4166
}
4267
}

0 commit comments

Comments
 (0)