< Summary

Class:Message[TPayload]
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/Communication/Message.cs
Covered lines:0
Uncovered lines:5
Coverable lines:5
Total lines:61
Line coverage:0% (0 of 5)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:3
Method coverage:0% (0 of 3)

Metrics

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

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 {
 14  public IAgent Sender { get; }
 15  public IAgent Receiver { get; }
 16  public MessageType Type { get; }
 17
 18  public abstract IMessagePayload Payload { get; }
 19
 20  protected Message(IAgent sender, IAgent receiver, MessageType type) {
 21    Sender = sender ?? throw new ArgumentNullException(nameof(sender));
 22    Receiver = receiver ?? throw new ArgumentNullException(nameof(receiver));
 23    Type = type;
 24  }
 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 {
 030  public TPayload PayloadData { get; }
 031  public sealed override IMessagePayload Payload => PayloadData;
 32  protected Message(IAgent sender, IAgent receiver, MessageType type, TPayload payload)
 033      : base(sender, receiver, type) {
 034    PayloadData = payload ?? throw new ArgumentNullException(nameof(payload));
 035  }
 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(IAgent sender, IAgent receiver, IInterceptor subInterceptor)
 42      : base(sender, receiver, MessageType.AssignTargetRequest,
 43             new AssignTargetRequestPayload(subInterceptor)) {}
 44}
 45
 46// This message is sent downwards from the IADS or a parent interceptor to inform the
 47// sub-interceptor of a new target.
 48public sealed class AssignTargetResponseMessage : Message<AssignTargetResponsePayload> {
 49  public AssignTargetResponseMessage(IAgent sender, IAgent receiver, IHierarchical target)
 50      : base(sender, receiver, MessageType.AssignTargetResponse,
 51             new AssignTargetResponsePayload(target)) {}
 52}
 53
 54// This message is sent upwards to a parent interceptor or IADS when a sub-interceptor can no longer
 55// pursue the current target and is requesting the parent interceptor or IADS to reassign that
 56// target elsewhere.
 57public sealed class ReassignTargetRequestMessage : Message<ReassignTargetRequestPayload> {
 58  public ReassignTargetRequestMessage(IAgent sender, IAgent receiver, IHierarchical target)
 59      : base(sender, receiver, MessageType.ReassignTargetRequest,
 60             new ReassignTargetRequestPayload(target)) {}
 61}