private void OnKill(Damage dmg, Unit unit) { killHandlers.ForEach((e) => e.onKill(dmg, unit)); if (KillListener != null) { KillListener.Invoke(dmg, unit); } }
/// <summary> /// DI 所使用的构造方法 /// </summary> /// <param name="options"></param> /// <param name="logger"></param> /// <param name="killAllListener"></param> /// <param name="killListener"></param> /// <param name="triggerListener"></param> public SwarmClient(IOptions <SwarmClientOptions> options, ILogger <SwarmClient> logger, KillAllListener killAllListener, KillListener killListener, TriggerListener triggerListener) { _logger = logger; var ops = options.Value; Name = ops.Name; Host = new Uri(ops.Host).ToString(); Group = ops.Group; AccessToken = ops.AccessToken; RetryTimes = ops.RetryTimes; Ip = ops.Ip; HeartbeatInterval = ops.HeartbeatInterval; _killAllListener = killAllListener; _killListener = killListener; _triggerListener = triggerListener; //TODO: Validate data Name = string.IsNullOrWhiteSpace(Name) ? Dns.GetHostName() : Name; if (string.IsNullOrWhiteSpace(Ip)) { var interfaces = NetworkInterface.GetAllNetworkInterfaces().FirstOrDefault(i => (i.NetworkInterfaceType == NetworkInterfaceType.Ethernet || i.NetworkInterfaceType == NetworkInterfaceType.Wireless80211) && i.OperationalStatus == OperationalStatus.Up); if (interfaces != null) { Ip = interfaces.GetIPProperties().UnicastAddresses.FirstOrDefault(a => a.IPv4Mask?.ToString() != "255.255.255.255" && a.Address.AddressFamily == AddressFamily.InterNetwork)?.Address .ToString(); } } if (string.IsNullOrWhiteSpace(Ip)) { Ip = "127.0.0.1"; } }