private void Callback_FleetStateUpdate(FleetStateDto fleetState) { FleetState = fleetState; lock (kingpinStateMailboxes) { foreach (IKingpinState kingpinState in fleetState.KingpinStates) { KingpinStateMailbox mailbox = kingpinStateMailboxes.FirstOrDefault(e => e.Key.Equals(kingpinState.IPAddress)); if (mailbox != null) { mailbox.Update(kingpinState); } else { KingpinStateMailbox mailBox = new KingpinStateMailbox(kingpinState.IPAddress, kingpinState); kingpinStateMailboxes.Add(mailBox); OnAdded(mailBox); } } IEnumerable <IPAddress> activeIP = fleetState.KingpinStates.Select(e => e.IPAddress); IEnumerable <IPAddress> deadIP = kingpinStateMailboxes.Select(e => e.Key).Except(activeIP).ToList(); foreach (IPAddress ipAddress in deadIP) { KingpinStateMailbox deadMailBox = kingpinStateMailboxes.First(e => e.Key == ipAddress); kingpinStateMailboxes.Remove(deadMailBox); OnRemoved(deadMailBox); } } }
public void OnCallback(FleetStateDto fleetState) { Action <FleetStateDto> handlers = FleetStateUpdate; if (handlers != null) { foreach (Action <FleetStateDto> handler in handlers.GetInvocationList()) { handler.BeginInvoke(fleetState, null, null); } } }
private static void FleetManagerClient_FleetStateUpdated(FleetStateDto fleetState) { if (fleetState == null) { throw new ArgumentNullException("fleetState"); } Console.SetCursorPosition(0, 5); for (int i = 0; i < 5; i++) // Clears five lines of the console { Console.Write(new String(' ', Console.BufferWidth)); } Console.SetCursorPosition(0, 5); Console.WriteLine($"Fleet size: {fleetState.KingpinStates.Count()}"); foreach (IKingpinState kingpinState in fleetState.KingpinStates) { Console.WriteLine($"IP Address:{kingpinState.IPAddress} Tick:{kingpinState.Tick}, X:{kingpinState.X}, Y:{kingpinState.Y}, Heading:{kingpinState.Heading}"); } }