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;
        }
Exemple #4
0
        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();
                    }
                }
            }
        }
Exemple #5
0
 /// <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);
 }
Exemple #6
0
 /// <summary>心跳</summary>
 /// <param name="inf"></param>
 /// <returns></returns>
 private async Task <PingResponse> PingAsync(PingInfo inf) => await PostAsync <PingResponse>("Node/Ping", inf);
Exemple #7
0
        /// <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();
        }
Exemple #8
0
        /// <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);
        }
Exemple #9
0
        /// <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);
        }
Exemple #13
0
 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);
            }
        }
Exemple #15
0
 public MouseOverInfo(PointF mouseLoc, PingInfo pingInfo)
 {
     MouseLoc  = mouseLoc;
     PingReply = pingInfo;
 }
Exemple #16
0
 protected void OnNewPingResult(PingInfo pingReply)
 {
     NewPingResult?.Invoke(this, new PingEventArgs(pingReply));
 }
Exemple #17
0
        /// <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);
        }
Exemple #19
0
    /// <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();
     }
 }
Exemple #22
0
        /// <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();
        }
Exemple #23
0
 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;
     }
 }