private void SendPing() { PingInfo info = new PingInfo(); info.SendDate = DateTime.Now; try { //info.ReceiveValue = SystemMonitor.Ping( info.SendDate ); } catch( Exception e ) { info.ErrorMessage = e.Message; } finally { info.ReceiveDate = DateTime.Now; } Info = info; }
private void DeleteSprites(PingInfo info) { if (info.Direction != null) { info.Direction.Dispose(); } if (info.Icon != null) { info.Icon.Dispose(); } if (info.IconBackground != null) { info.IconBackground.Dispose(); } if (info.ChampionDirection != null) { info.ChampionDirection.Dispose(); } if (info.Champion != null) { info.Champion.Dispose(); } }
/// <summary>填充在线节点信息</summary> /// <param name="olt"></param> /// <param name="inf"></param> private void Fill(NodeOnline olt, PingInfo inf) { if (inf.AvailableMemory > 0) { olt.AvailableMemory = (Int32)(inf.AvailableMemory / 1024 / 1024); } if (inf.AvailableFreeSpace > 0) { olt.AvailableFreeSpace = (Int32)(inf.AvailableFreeSpace / 1024 / 1024); } if (inf.CpuRate > 0) { olt.CpuRate = inf.CpuRate; } if (inf.Delay > 0) { olt.Delay = inf.Delay; } var dt = inf.Time.ToDateTime().ToLocalTime(); if (dt.Year > 2000) { olt.LocalTime = dt; olt.Offset = (Int32)Math.Round((dt - DateTime.Now).TotalSeconds); } if (!inf.Processes.IsNullOrEmpty()) { olt.Processes = inf.Processes; } if (!inf.Macs.IsNullOrEmpty()) { olt.MACs = inf.Macs; } //if (!inf.COMs.IsNullOrEmpty()) olt.COMs = inf.COMs; }
private void ScanNeighbors() { while (true) { var from = new IPEndPoint(IPAddress.Any, 0); var buffer = _client.Receive(ref from); var header = Encoding.UTF8.GetString(buffer, 0, buffer.Length); Debugger.Log("Received broadcast header: " + header); var pingInfo = PingInfo.Parse(header); if (pingInfo == null || pingInfo.Id == _id) { continue; } var address = from.Address.ToString(); var neighbor = new Neighbor { Name = pingInfo.Name, LastOnline = DateTime.Now, Address = address }; lock (this) { var oldSize = _neighbors.Count; _neighbors[address] = neighbor; if (oldSize != _neighbors.Count) { OnNeighborsChanged?.Invoke(); } } } }
/// <summary> /// Responds with PONG on a PING with the specified arguments. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void HandlePing(object sender, PingInfo e) { Command.SendPong(e.Message); }
/// <summary>心跳</summary> /// <param name="inf"></param> /// <returns></returns> private async Task <PingResponse> PingAsync(PingInfo inf) => await PostAsync <PingResponse>("Node/Ping", inf);
/// <summary>填充在线节点信息</summary> /// <param name="olt"></param> /// <param name="inf"></param> private void Fill(NodeOnline olt, PingInfo inf) { if (inf.AvailableMemory > 0) { olt.AvailableMemory = (Int32)(inf.AvailableMemory / 1024 / 1024); } if (inf.AvailableFreeSpace > 0) { olt.AvailableFreeSpace = (Int32)(inf.AvailableFreeSpace / 1024 / 1024); } if (inf.CpuRate > 0) { olt.CpuRate = inf.CpuRate; } if (inf.Temperature > 0) { olt.Temperature = inf.Temperature; } if (inf.Uptime > 0) { olt.Uptime = inf.Uptime; } if (inf.Delay > 0) { olt.Delay = inf.Delay; } var dt = inf.Time.ToDateTime().ToLocalTime(); if (dt.Year > 2000) { olt.LocalTime = dt; olt.Offset = (Int32)Math.Round((dt - DateTime.Now).TotalSeconds); } if (!inf.Processes.IsNullOrEmpty()) { olt.Processes = inf.Processes; } if (!inf.Macs.IsNullOrEmpty()) { olt.MACs = inf.Macs; } //if (!inf.COMs.IsNullOrEmpty()) olt.COMs = inf.COMs; // 插入节点数据 var data = new NodeData { NodeID = olt.NodeID, AvailableMemory = olt.AvailableMemory, AvailableFreeSpace = olt.AvailableFreeSpace, CpuRate = inf.CpuRate, Temperature = inf.Temperature, Uptime = inf.Uptime, Delay = inf.Delay, LocalTime = dt, Offset = olt.Offset }; data.SaveAsync(); }
/// <summary>获取心跳信息</summary> public PingInfo GetHeartInfo() { var exs = _excludes.Where(e => e.Contains("*")).ToArray(); var ps = Process.GetProcesses(); var pcs = new List <String>(); foreach (var item in ps) { // 有些进程可能已退出,无法获取详细信息 try { if (Runtime.Linux && item.SessionId == 0) { continue; } var name = item.ProcessName; if (name.EqualIgnoreCase(_excludes) || exs.Any(e => e.IsMatch(name))) { continue; } // 特殊处理dotnet if (name == "dotnet" || "*/dotnet".IsMatch(name)) { name = AppInfo.GetProcessName(item); } if (!pcs.Contains(name)) { pcs.Add(name); } } catch { } } var mi = MachineInfo.Current ?? _task.Result; mi.Refresh(); var properties = IPGlobalProperties.GetIPGlobalProperties(); var connections = properties.GetActiveTcpConnections(); var mcs = NetHelper.GetMacs().Select(e => e.ToHex("-")).OrderBy(e => e).Join(","); var driveInfo = new DriveInfo(Path.GetPathRoot(".".GetFullPath())); var ip = NetHelper.GetIPsWithCache().Where(ip => ip.IsIPv4() && !IPAddress.IsLoopback(ip) && ip.GetAddressBytes()[0] != 169).Join(); var ext = new PingInfo { AvailableMemory = mi.AvailableMemory, AvailableFreeSpace = (UInt64)driveInfo.AvailableFreeSpace, CpuRate = mi.CpuRate, Temperature = mi.Temperature, Battery = mi.Battery, UplinkSpeed = mi.UplinkSpeed, DownlinkSpeed = mi.DownlinkSpeed, ProcessCount = ps.Length, TcpConnections = connections.Count(e => e.State == TcpState.Established), TcpTimeWait = connections.Count(e => e.State == TcpState.TimeWait), TcpCloseWait = connections.Count(e => e.State == TcpState.CloseWait), Uptime = Environment.TickCount / 1000, Macs = mcs, //COMs = ps.Join(","), IP = ip, Processes = pcs.Join(), Time = DateTime.UtcNow.ToLong(), Delay = Delay, }; //ext.Uptime = Environment.TickCount64 / 1000; // 开始时间 Environment.TickCount 很容易溢出,导致开机24天后变成负数。 // 后来在 netcore3.0 增加了Environment.TickCount64 // 现在借助 Stopwatch 来解决 if (Stopwatch.IsHighResolution) { ext.Uptime = (Int32)(Stopwatch.GetTimestamp() / Stopwatch.Frequency); } return(ext); }
/// <summary>获取心跳信息</summary> public PingInfo GetHeartInfo() { var ps = Process.GetProcesses(); var pcs = new List <String>(); foreach (var item in ps) { // 有些进程可能已退出,无法获取详细信息 try { var name = item.ProcessName; if (name.EqualIgnoreCase(_excludes)) { continue; } if (!pcs.Contains(name)) { pcs.Add(name); } } catch { } } var mi = MachineInfo.Current ?? _task.Result; mi.Refresh(); var properties = IPGlobalProperties.GetIPGlobalProperties(); var connections = properties.GetActiveTcpConnections(); var mcs = NetHelper.GetMacs().Select(e => e.ToHex("-")).OrderBy(e => e).Join(","); var driveInfo = new DriveInfo(Path.GetPathRoot(".".GetFullPath())); var ext = new PingInfo { AvailableMemory = mi.AvailableMemory, AvailableFreeSpace = (UInt64)driveInfo.AvailableFreeSpace, CpuRate = mi.CpuRate, Temperature = mi.Temperature, ProcessCount = ps.Length, TcpConnections = connections.Count(e => e.State == TcpState.Established), TcpTimeWait = connections.Count(e => e.State == TcpState.TimeWait), TcpCloseWait = connections.Count(e => e.State == TcpState.CloseWait), Uptime = Environment.TickCount / 1000, Macs = mcs, //COMs = ps.Join(","), Processes = pcs.Join(), Time = DateTime.UtcNow.ToLong(), Delay = Delay, }; #if __CORE__ //ext.Uptime = Environment.TickCount64 / 1000; #endif // 开始时间 Environment.TickCount 很容易溢出,导致开机24天后变成负数。 // 后来在 netcore3.0 增加了Environment.TickCount64 // 现在借助 Stopwatch 来解决 if (Stopwatch.IsHighResolution) { ext.Uptime = (Int32)(Stopwatch.GetTimestamp() / Stopwatch.Frequency); } return(ext); }
private void CreateSprites(PingInfo info) { String iconName = null; String iconBackgroundName = null; String directionName = null; Color directionColor = Color.White; switch (info.Type) { case PingCategory.AssistMe: iconName = "pingcomehere"; iconBackgroundName = "pingmarker"; directionName = "directionindicator"; directionColor = Color.DeepSkyBlue; break; case PingCategory.Danger: iconName = "pinggetback"; iconBackgroundName = "pingmarker_red"; directionName = "directionindicator"; directionColor = Color.Red; break; } if(iconName == null) return; SpriteHelper.LoadTexture(iconName, ref info.Icon, SpriteHelper.TextureType.Default); info.Icon.Sprite.Scale = new Vector2(0.4f); info.Icon.Sprite.PositionUpdate = delegate { return GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()), new Size(info.Icon.Sprite.Width, info.Icon.Sprite.Height)); }; info.Icon.Sprite.VisibleCondition = delegate { return Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive(); }; info.Icon.Sprite.Add(1); SpriteHelper.LoadTexture(iconBackgroundName, ref info.IconBackground, SpriteHelper.TextureType.Default); info.IconBackground.Sprite.Scale = new Vector2(1.5f); info.IconBackground.Sprite.PositionUpdate = delegate { return GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()), new Size(info.IconBackground.Sprite.Width, info.IconBackground.Sprite.Height)); }; info.IconBackground.Sprite.VisibleCondition = delegate { return Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive(); }; info.IconBackground.Sprite.Add(0); SpriteHelper.LoadTexture(directionName, ref info.Direction, SpriteHelper.TextureType.Default); info.Direction.Sprite.Scale = new Vector2(0.6f); info.Direction.Sprite.PositionUpdate = delegate { Vector2 normPos = Drawing.WorldToScreen(info.Pos.To3D2()); Vector2 screenPos = GetScreenPosition(normPos, new Size(info.Direction.Sprite.Width, info.Direction.Sprite.Height)); float angle = AngleBetween(screenPos, normPos);//screenPos.AngleBetween(normPos); angle = Geometry.DegreeToRadian(angle); info.Direction.Sprite.Rotation = angle; //Check if it is degree //screenPos = screenPos.Extend(normPos, 100); //screenPos = screenPos.Rotated(angle); //Check if needed return screenPos; }; info.Direction.Sprite.VisibleCondition = delegate { return Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive(); }; info.Direction.Sprite.Color = directionColor; info.Direction.Sprite.Add(2); }
void Game_OnPing(GamePingEventArgs args) { if (!IsActive()) return; Obj_AI_Hero hero = args.Source as Obj_AI_Hero; if (hero != null && hero.IsValid) { PingInfo pingInfoN = new PingInfo(hero.NetworkId, args.Position, Game.Time + 2, args.PingType); pingInfo.Add(pingInfoN); switch (args.PingType) { case PingCategory.AssistMe: CreateSprites(pingInfoN); break; case PingCategory.Danger: CreateSprites(pingInfoN); break; } } }
private void CreateSprites(PingInfo info) { String iconName = null; String iconBackgroundName = null; String directionName = null; Color directionColor = Color.White; switch (info.Type) { case PingCategory.AssistMe: iconName = "pingcomehere"; iconBackgroundName = "pingmarker"; directionName = "directionindicator"; directionColor = Color.DeepSkyBlue; break; case PingCategory.Danger: iconName = "pinggetback"; iconBackgroundName = "pingmarker_red"; directionName = "directionindicator"; directionColor = Color.Red; break; } if (iconName == null) { return; } SpriteHelper.LoadTexture(iconName, ref info.Icon, SpriteHelper.TextureType.Default); info.Icon.Sprite.Scale = new Vector2(0.4f); info.Icon.Sprite.PositionUpdate = delegate { return(GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()), new Size(info.Icon.Sprite.Width, info.Icon.Sprite.Height))); }; info.Icon.Sprite.VisibleCondition = delegate { return(Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive()); }; info.Icon.Sprite.Add(1); SpriteHelper.LoadTexture(iconBackgroundName, ref info.IconBackground, SpriteHelper.TextureType.Default); info.IconBackground.Sprite.Scale = new Vector2(1.5f); info.IconBackground.Sprite.PositionUpdate = delegate { return(GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()), new Size(info.IconBackground.Sprite.Width, info.IconBackground.Sprite.Height))); }; info.IconBackground.Sprite.VisibleCondition = delegate { return(Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive()); }; info.IconBackground.Sprite.Add(0); SpriteHelper.LoadTexture(directionName, ref info.Direction, SpriteHelper.TextureType.Default); info.Direction.Sprite.Scale = new Vector2(0.6f); info.Direction.Sprite.PositionUpdate = delegate { Vector2 normPos = Drawing.WorldToScreen(info.Pos.To3D2()); Vector2 screenPos = GetScreenPosition(normPos, new Size(info.Direction.Sprite.Width, info.Direction.Sprite.Height)); float angle = AngleBetween(screenPos, normPos); //screenPos.AngleBetween(normPos); angle = Geometry.DegreeToRadian(angle); info.Direction.Sprite.Rotation = angle; //Check if it is degree //screenPos = screenPos.Extend(normPos, 100); //screenPos = screenPos.Rotated(angle); //Check if needed return(screenPos); }; info.Direction.Sprite.VisibleCondition = delegate { return(Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive()); }; info.Direction.Sprite.Color = directionColor; info.Direction.Sprite.Add(2); }
public PingEventArgs(PingInfo pingReply) { PingReply = pingReply; }
private void CreateSprites(PingInfo info) { String iconName = null; String iconBackgroundName = null; String directionName = null; String typeName = ""; ColorBGRA directionColor = SharpDX.Color.White; switch (info.Type) { case PingCategory.AssistMe: iconName = "pingcomehere"; iconBackgroundName = "pingmarker"; directionName = "directionindicator"; typeName = "Assist"; directionColor = SharpDX.Color.DeepSkyBlue; break; case PingCategory.Danger: iconName = "pinggetback"; iconBackgroundName = "pingmarker_red"; directionName = "directionindicator"; typeName = "Danger"; directionColor = SharpDX.Color.Red; break; case PingCategory.OnMyWay: iconName = "pingomw"; iconBackgroundName = "pingmarker_green"; directionName = "directionindicator"; typeName = "OnMyWay"; directionColor = SharpDX.Color.MediumSeaGreen; break; case PingCategory.Fallback: iconName = "pingmia"; iconBackgroundName = "pingmarker_yellow"; directionName = "directionindicator"; typeName = "Fallback"; directionColor = SharpDX.Color.Yellow; break; case PingCategory.EnemyMissing: iconName = "pingmia"; iconBackgroundName = "pingmarker_yellow"; directionName = "directionindicator"; typeName = "Miss"; directionColor = SharpDX.Color.Yellow; break; } //info.Text = new Render.Text(typeName, 0, 0, 20, Color.Aqua); //info.Text.PositionUpdate = delegate // { // return GetScreenPosition(info.Pos, new Size(50, 50)); // }; //info.Text.Add(1); if (iconName == null) { return; } SpriteHelper.LoadTexture(iconName, ref info.Icon, SpriteHelper.TextureType.Default); info.Icon.Sprite.Scale = new Vector2(0.3f); SpriteHelper.LoadTexture(iconBackgroundName, ref info.IconBackground, SpriteHelper.TextureType.Default); info.IconBackground.Sprite.Scale = new Vector2(1.5f); SpriteHelper.LoadTexture(directionName, ref info.Direction, SpriteHelper.TextureType.Default); info.Direction.Sprite.Scale = new Vector2(0.6f); info.Direction.Sprite.Color = directionColor; info.Direction.Sprite.PositionUpdate = delegate { var posInfo = DirectXDrawer.GetScreenPosition(info.Pos.To3D2(), new Size(info.Direction.Sprite.Width, info.Direction.Sprite.Height)); Vector2 screenPos = posInfo.Position; int apparentX = (int)Math.Max(1 + info.Direction.Sprite.Width, Math.Min(screenPos.X, Drawing.Width - info.Direction.Sprite.Width)); int apparentY = (int)Math.Max(1 + info.Direction.Sprite.Height, Math.Min(screenPos.Y, Drawing.Height - info.Direction.Sprite.Height)); float angle = posInfo.Angle; info.Direction.Sprite.Rotation = angle; return(new Vector2(apparentX, apparentY)); }; info.Direction.Sprite.VisibleCondition = delegate { return(IsActive() && !Common.IsOnScreen(Drawing.WorldToScreen(info.Pos.To3D2()))); }; info.Direction.Sprite.Add(2); info.Icon.Sprite.PositionUpdate = delegate { var posInfo = DirectXDrawer.GetScreenPosition(info.Pos.To3D2(), new Size(info.Icon.Sprite.Width + info.Direction.Sprite.Width, info.Icon.Sprite.Height + info.Direction.Sprite.Height)); Vector2 position = posInfo.Position; for (int i = 0; i < 200; i = i + 10) { var aabbBox = DirectXDrawer.GetAABBBox(info.Direction.Sprite); Vector2 positionNew = position.Extend(position + posInfo.Direction, -i); if (!((Math.Abs(positionNew.X - aabbBox.X) * 2 < (info.Icon.Sprite.Width + aabbBox.Width)) && (Math.Abs(positionNew.Y - aabbBox.Y) * 2 < (info.Icon.Sprite.Height + aabbBox.Height))) && positionNew.X > 50 && positionNew.X < Drawing.Width - 100 && positionNew.Y > 50 && positionNew.Y < Drawing.Height - 100) { if (Common.IsOnScreen(positionNew)) { return(positionNew); } else { break; } } } for (int i = 0; i < 200; i = i + 10) { var aabbBox = DirectXDrawer.GetAABBBox(info.Direction.Sprite); Vector2 positionNew = position.Extend(position + posInfo.Direction, i); if (!((Math.Abs(positionNew.X - aabbBox.X) * 2 < (info.Icon.Sprite.Width + aabbBox.Width)) && (Math.Abs(positionNew.Y - aabbBox.Y) * 2 < (info.Icon.Sprite.Height + aabbBox.Height))) && positionNew.X > 50 && positionNew.X < Drawing.Width - 100 && positionNew.Y > 50 && positionNew.Y < Drawing.Height - 100) { if (Common.IsOnScreen(positionNew)) { return(positionNew); } else { break; } } } return(new Vector2(1, 1)); }; info.Icon.Sprite.VisibleCondition = delegate { return(IsActive() && !Common.IsOnScreen(Drawing.WorldToScreen(info.Pos.To3D2()))); }; info.Icon.Sprite.Add(1); info.IconBackground.Sprite.PositionUpdate = delegate { var backgroundPos = info.Icon.Sprite.Position; return(new Vector2(backgroundPos.X - 7, backgroundPos.Y - 7)); }; info.IconBackground.Sprite.VisibleCondition = delegate { return(IsActive() && !Common.IsOnScreen(Drawing.WorldToScreen(info.Pos.To3D2()))); }; info.IconBackground.Sprite.Add(0); if (info.Type == PingCategory.OnMyWay) { SpriteHelper.LoadTexture(ObjectManager.GetUnitByNetworkId <Obj_AI_Hero>(info.NetworkId).ChampionName + ".png", ref info.Champion, "SPI"); if (info.Champion == null) { return; } SpriteHelper.LoadTexture(directionName, ref info.ChampionDirection, SpriteHelper.TextureType.Default); info.ChampionDirection.Sprite.Scale = new Vector2(0.6f); info.ChampionDirection.Sprite.Color = directionColor; info.ChampionDirection.Sprite.PositionUpdate = delegate { var posInfo = DirectXDrawer.GetScreenPosition(ObjectManager.GetUnitByNetworkId <Obj_AI_Hero>(info.NetworkId).Position, new Size(info.ChampionDirection.Sprite.Width, info.ChampionDirection.Sprite.Height)); Vector2 screenPos = posInfo.Position; int apparentX = (int)Math.Max(1 + info.ChampionDirection.Sprite.Width, Math.Min(screenPos.X, Drawing.Width - info.ChampionDirection.Sprite.Width)); int apparentY = (int)Math.Max(1 + info.ChampionDirection.Sprite.Height, Math.Min(screenPos.Y, Drawing.Height - info.ChampionDirection.Sprite.Height)); float angle = posInfo.Angle; info.ChampionDirection.Sprite.Rotation = angle; return(new Vector2(apparentX, apparentY)); }; info.ChampionDirection.Sprite.VisibleCondition = delegate { return(IsActive() && !Common.IsOnScreen(Drawing.WorldToScreen(ObjectManager.GetUnitByNetworkId <Obj_AI_Hero>(info.NetworkId).Position))); }; info.ChampionDirection.Sprite.Add(2); info.Champion.Sprite.UpdateTextureBitmap(SpriteHelper.CropImage(info.Champion.Sprite.Bitmap, info.Champion.Sprite.Width)); info.Champion.Sprite.Scale = new Vector2(0.5f); info.Champion.Sprite.PositionUpdate = delegate { var posInfo = DirectXDrawer.GetScreenPosition(ObjectManager.GetUnitByNetworkId <Obj_AI_Hero>(info.NetworkId).Position, new Size(info.Champion.Sprite.Width + info.ChampionDirection.Sprite.Width, info.Champion.Sprite.Height + info.ChampionDirection.Sprite.Height)); Vector2 position = posInfo.Position; for (int i = 0; i < 200; i = i + 10) { var aabbBox = DirectXDrawer.GetAABBBox(info.ChampionDirection.Sprite); Vector2 positionNew = position.Extend(position + posInfo.Direction, -i); if (!((Math.Abs(positionNew.X - aabbBox.X) * 2 < (info.Champion.Sprite.Width + aabbBox.Width)) && (Math.Abs(positionNew.Y - aabbBox.Y) * 2 < (info.Champion.Sprite.Height + aabbBox.Height))) && positionNew.X > 50 && positionNew.X < Drawing.Width - 100 && positionNew.Y > 50 && positionNew.Y < Drawing.Height - 100) { if (Common.IsOnScreen(positionNew)) { return(positionNew); } else { break; } } } for (int i = 0; i < 200; i = i + 10) { var aabbBox = DirectXDrawer.GetAABBBox(info.ChampionDirection.Sprite); Vector2 positionNew = position.Extend(position + posInfo.Direction, i); if (!((Math.Abs(positionNew.X - aabbBox.X) * 2 < (info.Champion.Sprite.Width + aabbBox.Width)) && (Math.Abs(positionNew.Y - aabbBox.Y) * 2 < (info.Champion.Sprite.Height + aabbBox.Height))) && positionNew.X > 50 && positionNew.X < Drawing.Width - 100 && positionNew.Y > 50 && positionNew.Y < Drawing.Height - 100) { if (Common.IsOnScreen(positionNew)) { return(positionNew); } else { break; } } } return(new Vector2(1, 1)); }; info.Champion.Sprite.VisibleCondition = delegate { return(IsActive() && !Common.IsOnScreen(Drawing.WorldToScreen(ObjectManager.GetUnitByNetworkId <Obj_AI_Hero>(info.NetworkId).Position))); }; info.Champion.Sprite.Add(1); } }
public MouseOverInfo(PointF mouseLoc, PingInfo pingInfo) { MouseLoc = mouseLoc; PingReply = pingInfo; }
protected void OnNewPingResult(PingInfo pingReply) { NewPingResult?.Invoke(this, new PingEventArgs(pingReply)); }
/// <summary>填充在线节点信息</summary> /// <param name="inf"></param> private void Fill(PingInfo inf) { var olt = this; if (inf.AvailableMemory > 0) { olt.AvailableMemory = (Int32)(inf.AvailableMemory / 1024 / 1024); } if (inf.AvailableFreeSpace > 0) { olt.AvailableFreeSpace = (Int32)(inf.AvailableFreeSpace / 1024 / 1024); } if (inf.CpuRate > 0) { olt.CpuRate = inf.CpuRate; } if (inf.Temperature > 0) { olt.Temperature = inf.Temperature; } if (inf.Battery > 0) { olt.Battery = inf.Battery; } if (inf.UplinkSpeed > 0) { olt.UplinkSpeed = (Int64)inf.UplinkSpeed; } if (inf.DownlinkSpeed > 0) { olt.DownlinkSpeed = (Int64)inf.DownlinkSpeed; } if (inf.ProcessCount > 0) { olt.ProcessCount = inf.ProcessCount; } if (inf.TcpConnections > 0) { olt.TcpConnections = inf.TcpConnections; } if (inf.TcpTimeWait > 0) { olt.TcpTimeWait = inf.TcpTimeWait; } if (inf.TcpCloseWait > 0) { olt.TcpCloseWait = inf.TcpCloseWait; } if (inf.Uptime > 0) { olt.Uptime = inf.Uptime; } if (inf.Delay > 0) { olt.Delay = inf.Delay; } var dt = inf.Time.ToDateTime().ToLocalTime(); if (dt.Year > 2000) { olt.LocalTime = dt; olt.Offset = (Int32)Math.Round((dt - DateTime.Now).TotalSeconds); } if (!inf.Processes.IsNullOrEmpty()) { olt.Processes = inf.Processes; } if (!inf.Macs.IsNullOrEmpty()) { olt.MACs = inf.Macs; } //if (!inf.COMs.IsNullOrEmpty()) olt.COMs = inf.COMs; if (!inf.IP.IsNullOrEmpty()) { olt.IP = inf.IP; } //olt.Data = inf.ToJson(); var dic = inf.ToDictionary(); dic.Remove("Processes"); olt.Data = dic.ToJson(); }
private void CreateSprites(PingInfo info) { String iconName = null; String iconBackgroundName = null; String directionName = null; Color directionColor = Color.White; switch (info.Type) { case PingCategory.AssistMe: iconName = "pingcomehere"; iconBackgroundName = "pingmarker"; directionName = "directionindicator"; directionColor = Color.DeepSkyBlue; break; case PingCategory.Danger: iconName = "pinggetback"; iconBackgroundName = "pingmarker_red"; directionName = "directionindicator"; directionColor = Color.Red; break; } if(iconName == null) return; SpriteHelper.LoadTexture(iconName, ref info.Icon, SpriteHelper.TextureType.Default); info.Icon.Sprite.Scale = new Vector2(0.4f); info.Icon.Sprite.PositionUpdate = delegate { //return GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()), new Size(info.Icon.Sprite.Width, info.Icon.Sprite.Height)); //if (Drawing.WorldToScreen(info.Pos.To3D2()).IsOnScreen()) //{ // return GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()), new Size(info.Icon.Sprite.Width, info.Icon.Sprite.Height)); //} //else //{ // Vector2 myScreen = new Vector2(Drawing.Width / 2, Drawing.Height / 2); // Vector2 norm = Drawing.WorldToMinimap(info.Pos.To3D2()) - Drawing.WorldToMinimap(Drawing.Camera); // norm.Normalize(); // myScreen * norm; // return GetScreenPosition(Drawing.WorldToMinimap(info.Pos.To3D2()), new Size(info.Icon.Sprite.Width, info.Icon.Sprite.Height)); //} Vector2 wts = new Vector2(); if (DirectXDrawer.WorldToScreen(info.Pos.To3D2(), ref wts)) return GetScreenPosition(wts, new Size(info.Icon.Sprite.Width, info.Icon.Sprite.Height)); else { return new Vector2(200,200); } }; info.Icon.Sprite.VisibleCondition = delegate { return IsActive(); }; info.Icon.Sprite.Add(1); SpriteHelper.LoadTexture(iconBackgroundName, ref info.IconBackground, SpriteHelper.TextureType.Default); info.IconBackground.Sprite.Scale = new Vector2(1.5f); info.IconBackground.Sprite.PositionUpdate = delegate { //return GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()), new Size(info.IconBackground.Sprite.Width, info.IconBackground.Sprite.Height)); Vector2 wts = new Vector2(); if (DirectXDrawer.WorldToScreen(info.Pos.To3D2(), ref wts)) return GetScreenPosition(wts, new Size(info.IconBackground.Sprite.Width, info.IconBackground.Sprite.Height)); else { return new Vector2(200, 200); } }; info.IconBackground.Sprite.VisibleCondition = delegate { return IsActive(); }; info.IconBackground.Sprite.Add(0); SpriteHelper.LoadTexture(directionName, ref info.Direction, SpriteHelper.TextureType.Default); info.Direction.Sprite.Scale = new Vector2(0.6f); info.Direction.Sprite.PositionUpdate = delegate { Vector2 normPos = Drawing.WorldToScreen(info.Pos.To3D2()); Vector2 screenPos = GetScreenPosition(normPos, new Size(info.Direction.Sprite.Width, info.Direction.Sprite.Height)); float angle = AngleBetween(screenPos, normPos);//screenPos.AngleBetween(normPos); angle = Geometry.DegreeToRadian(angle); info.Direction.Sprite.Rotation = angle; //Check if it is degree //screenPos = screenPos.Extend(normPos, 100); //screenPos = screenPos.Rotated(angle); //Check if needed return screenPos; }; info.Direction.Sprite.VisibleCondition = delegate { return IsActive(); }; info.Direction.Sprite.Color = directionColor; info.Direction.Sprite.Add(2); }
/// <summary> /// Determines whether the Node can reach the specified destination Node. /// Raises event OnPing passing <c>PingInfo</c> as parameter. /// </summary> /// <returns> Returns <c>PingInfo</c> structure with results.</returns> /// <param name="destination">Destination.</param> public PingInfo CanReach(IP destination, PingInfo incomeInfo = null) { if (incomeInfo == null) { incomeInfo = new PingInfo(); incomeInfo.target = destination; incomeInfo.origin = this; incomeInfo.reachedNodes = new List <Node> (); incomeInfo.reachedNodes.Add(this); } else { if (incomeInfo.reachedNodes.Contains(this)) { return(null); } } //si es una direccion de las interficies propias foreach (Interface i in Interfaces) { if (i.IsUp() && i.ip.Equals(destination)) { incomeInfo.destiny = this; incomeInfo.reached = true; RaiseEventFull(OnPing, incomeInfo); return(incomeInfo); } } //TODO mirar firewall (iptable) foreach (Interface i in Interfaces) { if (i.IsUp() && i.connectedTo != null && i.connectedTo.IsUp()) { //si esta conectado directamente if (i.connectedTo.ip.Equals(destination)) { incomeInfo.destiny = i.connectedTo.node; incomeInfo.reached = true; RaiseEventFull(OnPing, incomeInfo); return(incomeInfo); } else { if (i.connectedTo.node.HasMatchingRoute(destination)) { i.connectedTo.node.CanReach(destination, incomeInfo); } if (incomeInfo.reached) { RaiseEventFull(OnPing, incomeInfo); return(incomeInfo); } } } } RaiseEventFull(OnPing, incomeInfo); return(incomeInfo); }
private void CreateSprites(PingInfo info) { String iconName = null; String iconBackgroundName = null; String directionName = null; Color directionColor = Color.White; switch (info.Type) { case Packet.PingType.AssistMe: iconName = "?????????????????"; iconBackgroundName = "?????????????????"; directionName = "?????????????????"; directionColor = Color.DeepSkyBlue; break; case Packet.PingType.Danger: iconName = "?????????????????"; iconBackgroundName = "?????????????????"; directionName = "?????????????????"; directionColor = Color.Red; break; } if (iconName == null) { return; } SpriteHelper.LoadTexture(iconName, ref info.Icon, SpriteHelper.TextureType.Default); info.Icon.Sprite.PositionUpdate = delegate { return(GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()))); }; info.Icon.Sprite.VisibleCondition = delegate { return(Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive()); }; info.Icon.Sprite.Add(1); SpriteHelper.LoadTexture(iconBackgroundName, ref info.IconBackground, SpriteHelper.TextureType.Default); info.IconBackground.Sprite.PositionUpdate = delegate { return(GetScreenPosition(Drawing.WorldToScreen(info.Pos.To3D2()))); }; info.IconBackground.Sprite.VisibleCondition = delegate { return(Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive()); }; info.IconBackground.Sprite.Add(0); SpriteHelper.LoadTexture(directionName, ref info.Direction, SpriteHelper.TextureType.Default); info.Direction.Sprite.PositionUpdate = delegate { Vector2 normPos = Drawing.WorldToScreen(info.Pos.To3D2()); Vector2 screenPos = GetScreenPosition(normPos); float angle = screenPos.AngleBetween(normPos); info.Direction.Sprite.Rotation = angle; //Check if it is degree angle = Geometry.DegreeToRadian(angle); screenPos = screenPos.Rotated(angle); //Check if needed screenPos = screenPos.Extend(normPos, 100); return(screenPos); }; info.Direction.Sprite.VisibleCondition = delegate { return(Misc.Miscs.GetActive() && SmartPingImproveMisc.GetActive()); }; info.Direction.Sprite.Color = directionColor; info.Direction.Sprite.Add(2); }
private void DeleteSprites(PingInfo info) { if (info.Direction != null) { info.Direction.Dispose(); } if (info.Icon != null) { info.Icon.Dispose(); } if (info.IconBackground != null) { info.IconBackground.Dispose(); } }
/// <summary>填充在线节点信息</summary> /// <param name="inf"></param> private void Fill(PingInfo inf) { var olt = this; if (inf.AvailableMemory > 0) { olt.AvailableMemory = (Int32)(inf.AvailableMemory / 1024 / 1024); } if (inf.AvailableFreeSpace > 0) { olt.AvailableFreeSpace = (Int32)(inf.AvailableFreeSpace / 1024 / 1024); } if (inf.CpuRate > 0) { olt.CpuRate = inf.CpuRate; } if (inf.Temperature > 0) { olt.Temperature = inf.Temperature; } if (inf.ProcessCount > 0) { olt.ProcessCount = inf.ProcessCount; } if (inf.TcpConnections > 0) { olt.TcpConnections = inf.TcpConnections; } if (inf.TcpTimeWait > 0) { olt.TcpTimeWait = inf.TcpTimeWait; } if (inf.TcpCloseWait > 0) { olt.TcpCloseWait = inf.TcpCloseWait; } if (inf.Uptime > 0) { olt.Uptime = inf.Uptime; } if (inf.Delay > 0) { olt.Delay = inf.Delay; } var dt = inf.Time.ToDateTime().ToLocalTime(); if (dt.Year > 2000) { olt.LocalTime = dt; olt.Offset = (Int32)Math.Round((dt - DateTime.Now).TotalSeconds); } if (!inf.Processes.IsNullOrEmpty()) { olt.Processes = inf.Processes; } if (!inf.Macs.IsNullOrEmpty()) { olt.MACs = inf.Macs; } //if (!inf.COMs.IsNullOrEmpty()) olt.COMs = inf.COMs; // 插入节点数据 var data = new NodeData { NodeID = olt.NodeID, Name = olt.Name, AvailableMemory = olt.AvailableMemory, AvailableFreeSpace = olt.AvailableFreeSpace, CpuRate = inf.CpuRate, Temperature = inf.Temperature, ProcessCount = inf.ProcessCount, TcpConnections = inf.TcpConnections, TcpTimeWait = inf.TcpTimeWait, TcpCloseWait = inf.TcpCloseWait, Uptime = inf.Uptime, Delay = inf.Delay, LocalTime = dt, Offset = olt.Offset, Data = inf.ToJson(), Creator = Environment.MachineName, }; data.SaveAsync(); }
public PingInfo GetPingInfo() { const string sql = @" select isnull(sum(olb), 0) from dbo.ActiveLoans(getdate(), 0) select count(*) from Persons select count(*) from Groups select count(*) from Villages select count(*) from Corporates "; var result = new PingInfo(); using (var connection = GetConnection()) using (var multi = connection.QueryMultiple(sql, null, CommandType.Text)) { result.Olb = multi.Read<decimal>().Single(); result.NumberOfIndividualClients = multi.Read<int>().Single(); result.NumberOfSolidarityGroups = multi.Read<int>().Single(); result.NumberOfNonSolidarityGroups = multi.Read<int>().Single(); result.NumberOfCompanies = multi.Read<int>().Single(); return result; } }