< Summary

Class:Message
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Communication/Message.cs
Covered lines:7
Uncovered lines:1
Coverable lines:8
Total lines:62
Line coverage:87.5% (7 of 8)
Covered branches:0
Total branches:0
Covered methods:3
Total methods:4
Method coverage:75% (3 of 4)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
Message(...)0%330100%

File(s)

/github/workspace/Assets/Scripts/Communication/Message.cs

#LineLine coverage
 1// The message is a base class for the different types of messages being sent and received among the
 2// agents. It always carries a sender, a receiver, a message type, and a payload.
 3
 4using System;
 5
 6// Message type enumeration that defines the message payload.
 7public enum MessageType {
 8  AssignTargetRequest,
 9  AssignTargetResponse,
 10  ReassignTargetRequest,
 11}
 12
 13public abstract class Message {
 114  public CommsNode Sender { get; }
 515  public CommsNode Receiver { get; }
 016  public MessageType Type { get; }
 17
 18  public abstract IMessagePayload Payload { get; }
 19
 420  protected Message(CommsNode sender, CommsNode receiver, MessageType type) {
 221    Sender = sender ?? throw new ArgumentNullException(nameof(sender));
 222    Receiver = receiver ?? throw new ArgumentNullException(nameof(receiver));
 223    Type = type;
 224  }
 25}
 26
 27// Generic message that stores a payload. The generic type refers to the payloa type.
 28public abstract class Message<TPayload> : Message
 29    where TPayload : class, IMessagePayload {
 30  public TPayload PayloadData { get; }
 31  public sealed override IMessagePayload Payload => PayloadData;
 32  protected Message(CommsNode sender, CommsNode receiver, MessageType type, TPayload payload)
 33      : base(sender, receiver, type) {
 34    PayloadData = payload ?? throw new ArgumentNullException(nameof(payload));
 35  }
 36}
 37
 38// This message is sent upwards to a parent interceptor or IADS when a sub-interceptor has no target
 39// and is requesting a new target.
 40public sealed class AssignTargetRequestMessage : Message<AssignTargetRequestPayload> {
 41  public AssignTargetRequestMessage(CommsNode sender, CommsNode receiver,
 42                                    IInterceptor subInterceptor)
 43      : base(sender, receiver, MessageType.AssignTargetRequest,
 44             new AssignTargetRequestPayload(subInterceptor)) {}
 45}
 46
 47// This message is sent downwards from the IADS or a parent interceptor to inform the
 48// sub-interceptor of a new target.
 49public sealed class AssignTargetResponseMessage : Message<AssignTargetResponsePayload> {
 50  public AssignTargetResponseMessage(CommsNode sender, CommsNode receiver, IHierarchical target)
 51      : base(sender, receiver, MessageType.AssignTargetResponse,
 52             new AssignTargetResponsePayload(target)) {}
 53}
 54
 55// This message is sent upwards to a parent interceptor or IADS when a sub-interceptor can no longer
 56// pursue the current target and is requesting the parent interceptor or IADS to reassign that
 57// target elsewhere.
 58public sealed class ReassignTargetRequestMessage : Message<ReassignTargetRequestPayload> {
 59  public ReassignTargetRequestMessage(CommsNode sender, CommsNode receiver, IHierarchical target)
 60      : base(sender, receiver, MessageType.ReassignTargetRequest,
 61             new ReassignTargetRequestPayload(target)) {}
 62}