예제 #1
0
        private void SendPing()
        {
            if (m_Client != null && m_Client.Connected && m_User.IsAuthenticated && ClientPingMode == PingMode.Initiative)
            {
                if (_lastSendTime.AddSeconds(PingInterval) > DateTime.Now)
                {
                    //未到时间
                    return;
                }

                try
                {
                    byte[] sendData = PingData.ToByte();
                    m_Client.BeginSend(sendData, 0, sendData.Length, SocketFlags.None, null, m_Client);

                    UpdateTimeForInitiativePing();
                    LogOpInfo("Send--Ping", pingData);
                }
                catch (Exception ex)
                {
                }
            }
            else
            {
                PingTimer.Stop();
            }
        }
예제 #2
0
        public void PingCompleate(object sender, PingCompletedEventArgs e)
        {
            Log_Verb("Ping Complete");
            PingData  seq  = (PingData)e.UserState;
            PingReply rep  = e.Reply;
            Ping      ping = (Ping)sender;

            lock (sentry)
            {
                pings.Remove(ping);
                ping.Dispose();

                switch (rep.Status)
                {
                case IPStatus.Success:
                    ICMP retICMP = new ICMP(seq.Data);
                    retICMP.HeaderData = seq.HeaderData;
                    retICMP.Type       = 0; //echo reply
                    recvBuff.Add(retICMP);
                    break;

                default:
                    //ping failed
                    open -= 1;
                    if (open == 0)
                    {
                        RaiseEventConnectionClosed();
                    }
                    break;
                }
            }
        }
예제 #3
0
        public async Task <ActionResult <PingData> > Get(string host)
        {
            var validatedIp = NetUtils.GetIpAddress(host);

            if (validatedIp == null)
            {
                var msg = "Invalid host or host could not be reached";
                _logger.LogError(msg);
                return(BadRequest(msg));
            }

            var ipAddress = validatedIp.ToString();
            var client    = _clientFactory.CreateClient();

            var viewDnsRepository = new ViewDnsRepository(client);

            _logger.LogDebug("Getting Ping data...");
            var pingData = await viewDnsRepository.GetPingData(ipAddress);

            _logger.LogDebug("Ping data result: {1}", pingData);

            var output = new PingData
            {
                Host    = pingData.Query["host"],
                Replies = new List <PingData.ReplyData>()
            };

            foreach (var reply in pingData.Response.Replies)
            {
                output.Replies.Add(new PingData.ReplyData("rtt", reply.Rtt));
            }

            return(Ok(output));
        }
예제 #4
0
    public static bool Ping(PingData[] PingList, uint timeout)
    {
        uint tick = Utility.GetTickCount();

        for (int i = 0; i < PingList.Length; ++i)
        {
            PingData pd = PingList[i];
            pd.Socket     = TCPClient.CreateSocket(true, true);
            pd.Ping       = tick;
            pd.Completion = false;
            pd.endPoint   = new IPEndPoint(IPAddress.Parse(pd.IP), pd.Port);
            Thread th = new Thread(new ParameterizedThreadStart(ThreadConnect));
            th.Start(pd);
        }
        while (Utility.GetTickCount() - tick < timeout)
        {
            uint k = 0;
            for (int i = 0; i < PingList.Length; ++i)
            {
                if (PingList[i].Completion)
                {
                    ++k;
                }
            }
            if (k == PingList.Length)
            {
                return(true);
            }
        }
        return(false);
    }
예제 #5
0
 public async Task AddAsync(Guid id, string vehicleId, DateTime recivedAt)
 {
     //var activityCategory = await _pingRepository.GetAsync(category);
     //if (activityCategory == null)
     //{
     //    throw new ActioException("category_not_found",
     //        $"Category: '{category}' was not found.");
     //}
     var pingInfo = new PingData(id, vehicleId, recivedAt);
     await _pingRepository.AddAsync(pingInfo);
 }
예제 #6
0
 public PingInfo Map(PingData data)
 {
     return(new PingInfo
     {
         Address = data.Address,
         TTL = data.TTL,
         RoundtripTime = data.RoundtripTime,
         DontFragment = data.DontFragment,
         BufferLength = data.BufferLength,
         Status = data.Status
     });
 }
예제 #7
0
파일: VimUtil.cs 프로젝트: zhutoulwz/VsVim
        internal static NormalCommand CreatePing(Action <CommandData> action)
        {
            Func <CommandData, CommandResult> func =
                commandData =>
            {
                action(commandData);
                return(CommandResult.NewCompleted(ModeSwitch.NoSwitch));
            };
            var data = new PingData(func.ToFSharpFunc());

            return(NormalCommand.NewPing(data));
        }
 public static void SetRespondable(PlayerCharacterMasterController owner, PingData pingData, int pingTypeIndex, int pingSkinIndex, string displayName)
 {
     respondables[owner] = new RespondablePingData {
         pingTypeIndex = pingTypeIndex,
         pingSkinIndex = pingSkinIndex,
         birthday      = Time.unscaledTime,
         pingData      = pingData,
         yesVotes      = new HashSet <PlayerCharacterMasterController>(),
         noVotes       = new HashSet <PlayerCharacterMasterController>(),
         displayName   = displayName
     };
     respondables[owner].yesVotes.Add(owner);
     Chat.AddMessage(Language.GetStringFormatted("RADIALPINGS_SPECIAL_RESPONDABLE_START", RESPONDABLE_LIFETIME.ToString("N0")));
 }
        //0: self
        //1: user
        //2: message
        //3: yes count
        //4: other count
        //5: no count
        private bool RespondTryApply(PingData pingData, List <string> tokens, ResponseType responseType)
        {
            var targetPCMC = pingData.targets[1].GetComponent <PlayerCharacterMasterController>();

            if (!respondables.ContainsKey(targetPCMC))
            {
                return(false);
            }
            var resp        = respondables[targetPCMC];
            int newYesVotes = resp.yesVotes.Count;
            int newNoVotes  = resp.noVotes.Count;
            var nvc         = resp.noVotes.Contains(pingData.owner);
            var yvc         = resp.yesVotes.Contains(pingData.owner);

            switch (responseType)
            {
            case ResponseType.No:
                if (nvc)
                {
                    return(false);
                }
                newNoVotes++;
                if (yvc)
                {
                    newYesVotes--;
                }
                break;

            case ResponseType.Yes:
                if (yvc)
                {
                    return(false);
                }
                newYesVotes++;
                if (nvc)
                {
                    newNoVotes--;
                }
                break;
            }
            int newAbstainVotes = PlayerCharacterMasterController.instances.Count - newYesVotes - newNoVotes;

            tokens.Add(Util.GetBestMasterName(targetPCMC.master));
            tokens.Add(resp.displayName);
            tokens.Add(newYesVotes.ToString());
            tokens.Add(newAbstainVotes.ToString());
            tokens.Add(newNoVotes.ToString());
            return(true);
        }
        public PingData GetPingData()
        {
            PingData pingData = null;

            InstalledPackage package = InstalledPackage.GetAllInstalledPackages().SingleOrDefault(ip => ip.Data.Name.Equals("Tea Commerce") || ip.Data.Name.Equals("teacommerce"));

            if (package != null)
            {
                string        teaCommerceVersion = package.Data.Version;
                const string  cms                = "Umbraco";
                string        cmsVersion         = UmbracoVersion.Current.ToString();
                string        databaseTechnology = _databaseFactory.Get().DatabaseType.ToString();
                string        technology         = "ASP.NET Web Forms";
                List <string> renderingEngines   = new List <string>();

                XmlNode renderingEngineXml = UmbracoSettings._umbracoSettings.SelectSingleNode("//templates/defaultRenderingEngine");
                if (renderingEngineXml != null && renderingEngineXml.InnerText.ToLowerInvariant() == "mvc")
                {
                    technology = "ASP.NET MVC";
                }

                if (technology == "ASP.NET MVC")
                {
                    renderingEngines.Add("Razor");
                }
                else
                {
                    string macroScriptsFolderPath = HostingEnvironment.MapPath("~/macroScripts");
                    if (macroScriptsFolderPath != null && Directory.Exists(macroScriptsFolderPath) && Directory.GetFiles(macroScriptsFolderPath, "*.cshtml", SearchOption.AllDirectories).Any())
                    {
                        renderingEngines.Add("Razor");
                    }
                }

                string xsltFolderPath = HostingEnvironment.MapPath("~/xslt");
                if (xsltFolderPath != null && Directory.Exists(xsltFolderPath) && Directory.GetFiles(xsltFolderPath, "*.xslt", SearchOption.AllDirectories).Any())
                {
                    renderingEngines.Add("XSLT");
                }

                pingData = new PingData(teaCommerceVersion, cms, cmsVersion, databaseTechnology, technology)
                {
                    RenderingEngines = renderingEngines
                };
            }

            return(pingData);
        }
예제 #11
0
        public async Task <PingData> ForwardPing(PingData data, string path)
        {
            var client        = _clientFactory.CreateClient();
            var jsonData      = JsonConvert.SerializeObject(data);
            var stringContent = new StringContent(jsonData, Encoding.UTF8, "application/json");

            var response = await client.PostAsync(path, stringContent);

            response.EnsureSuccessStatusCode();

            var newData = await response.Content.ReadAsStringAsync();

            var result = JsonConvert.DeserializeObject <PingData>(newData);

            return(result);
        }
예제 #12
0
        public bool Parse(XElement input, string clientLogin)
        {
            if (!(input.Attribute("moduleType").Value == "ping"))
            {
                return(false);
            }

            var data = new PingData
            {
                Date = DateTime.Now,
                Name = clientLogin
            };

            _pingCacher.Add(data);


            return(true);
        }
예제 #13
0
    IEnumerator sendTestPingData()
    {
        while (_TestPingData)
        {
            currentPingIndex++;


            PingData data = new PingData();
            data.sendTime = Time.unscaledTime;
            sendPingList.Add(currentPingIndex, data);

            TestBinMsg msg = new TestBinMsg();
            msg.stamp = currentPingIndex;
            RoomSession.inst.send(msg);

            yield return(new WaitForSeconds(2.0f));
        }
    }
        private int RespondModify(ref PingData pingData, int catalogIndex, List <string> formatInserts, ResponseType responseType)
        {
            var targetPCMC = pingData.targets[1].GetComponent <PlayerCharacterMasterController>();
            var resp       = respondables[targetPCMC];

            switch (responseType)
            {
            case ResponseType.No:
                resp.noVotes.Add(pingData.owner);
                resp.yesVotes.Remove(pingData.owner);
                break;

            case ResponseType.Yes:
                resp.yesVotes.Add(pingData.owner);
                resp.noVotes.Remove(pingData.owner);
                break;
            }
            return(MiscUtil.ModifyTargetSelf(ref pingData, catalogIndex, formatInserts));
        }
예제 #15
0
        public void Go(List <Sender> senders, Func <PingData, byte[]> serialize, int iterations = 10)
        {
            for (var i = 0; i < iterations; i++)
            {
                var data = new PingData()
                {
                    DeviceId = Guid.NewGuid().ToString(),
                    Message  = "Value x y z",
                    PingTime = DateTime.UtcNow
                };

                var byteData = serialize(data);

                foreach (var sender in senders)
                {
                    sender.Send(byteData).Wait();
                }
            }
        }
예제 #16
0
        public async Task <PingData> GetPingDetails(string ipAddress)
        {
            PingData data = null;

            using (Ping pingSender = new Ping())
            {
                //var a = pingSender.SendPingAsync(ipAddress).GetAwaiter();
                PingReply reply = await pingSender.SendPingAsync(ipAddress);

                data               = new PingData();
                data.Address       = reply.Address.ToString();
                data.RoundtripTime = reply.RoundtripTime;
                data.DontFragment  = reply.Options.DontFragment;
                data.Status        = reply.Status.ToString();
                data.TTL           = reply.Options.Ttl;
                data.BufferLength  = reply.Buffer.Length;
            }

            return(data);
        }
        public PingData GetPingData()
        {
            PingData pingData = null;

              InstalledPackage package = InstalledPackage.GetAllInstalledPackages().SingleOrDefault( ip => ip.Data.Name.Equals( "Tea Commerce" ) || ip.Data.Name.Equals( "teacommerce" ) );

              if ( package != null ) {
            string teaCommerceVersion = package.Data.Version;
            const string cms = "Umbraco";
            string cmsVersion = UmbracoVersion.Current.ToString();
            string databaseTechnology = _databaseFactory.Get().DatabaseType.ToString();
            string technology = "ASP.NET Web Forms";
            List<string> renderingEngines = new List<string>();

            XmlNode renderingEngineXml = UmbracoSettings._umbracoSettings.SelectSingleNode( "//templates/defaultRenderingEngine" );
            if ( renderingEngineXml != null && renderingEngineXml.InnerText.ToLowerInvariant() == "mvc" ) {
              technology = "ASP.NET MVC";
            }

            if ( technology == "ASP.NET MVC" ) {
              renderingEngines.Add( "Razor" );
            } else {
              string macroScriptsFolderPath = HostingEnvironment.MapPath( "~/macroScripts" );
              if ( macroScriptsFolderPath != null && Directory.Exists( macroScriptsFolderPath ) && Directory.GetFiles( macroScriptsFolderPath, "*.cshtml", SearchOption.AllDirectories ).Any() ) {
            renderingEngines.Add( "Razor" );
              }
            }

            string xsltFolderPath = HostingEnvironment.MapPath( "~/xslt" );
            if ( xsltFolderPath != null && Directory.Exists( xsltFolderPath ) && Directory.GetFiles( xsltFolderPath, "*.xslt", SearchOption.AllDirectories ).Any() ) {
              renderingEngines.Add( "XSLT" );
            }

            pingData = new PingData( teaCommerceVersion, cms, cmsVersion, databaseTechnology, technology ) {
              RenderingEngines = renderingEngines
            };
              }

              return pingData;
        }
예제 #18
0
        public async Task <IActionResult> Ping([FromBody] PingData data)
        {
            var json = JsonConvert.SerializeObject(data);

            _logger.LogInformation($"PING: {json}");

            var localIp  = _accessor.ActionContext.HttpContext.Connection.LocalIpAddress.ToString();
            var remoteIp = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();
            var protocol = _accessor.ActionContext.HttpContext.Request.IsHttps ? "https" : "http";
            var pingUrl  = $"{protocol}://{_accessor.ActionContext.HttpContext.Request.Host}/{_accessor.ActionContext.HttpContext.Request.Path}";


            _logger.LogInformation($"Connection.LocalIpAddress: {localIp}");
            _logger.LogInformation($"Connection.RemoteIpAddress: {remoteIp}");

            PingData result = null;

            var nextData = new PingData
            {
                Id            = Guid.NewGuid().ToString(),
                PingerLocalIp = data.PingerLocalIp,
                PingLocalIp   = localIp,
                PingRemoteIp  = remoteIp,
                TargetUrl     = data.TargetUrl,
                PingUrl       = pingUrl
            };


            try
            {
                result = await _sender.ForwardPing(nextData, nextData.TargetUrl);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message, ex);
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
            return(Ok(result));
        }
예제 #19
0
        public void PingCompleate(object sender, System.Net.NetworkInformation.PingCompletedEventArgs e)
        {
            PingData  Seq = (PingData)e.UserState;
            PingReply rep = e.Reply;

            lock (sentry)
            {
                switch (rep.Status)
                {
                case IPStatus.Success:
                    ICMP retICMP = new ICMP(Seq.Data);
                    retICMP.HeaderData = Seq.HeaderData;
                    retICMP.Type       = 0; //echo reply
                    recvbuff.Add(retICMP);
                    break;

                default:
                    open -= 1;
                    break;
                }
            }
        }
예제 #20
0
    public static void ThreadConnect(object obj)
    {
        PingData pd = (PingData)obj;

        byte[] buff = new byte[32];
        try
        {
            pd.Socket.Connect(pd.endPoint);
            int k = pd.Socket.Receive(buff, SocketFlags.None);
            if (k >= 4)
            {
                pd.Ping   = Utility.GetTickCount() - pd.Ping;
                pd.Online = System.BitConverter.ToUInt32(buff, 0);
                pd.Socket.Close();
            }
        }
        catch
        {
        }
        pd.Socket     = null;
        pd.Completion = true;
    }
예제 #21
0
        public async Task <IActionResult> Bounce([FromBody] PingData data)
        {
            var json = JsonConvert.SerializeObject(data);

            _logger.LogInformation($"BOUNCE: {json}");

            var localIp  = _accessor.ActionContext.HttpContext.Connection.LocalIpAddress.ToString();
            var remoteIp = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.ToString();

            _logger.LogInformation($"Connection.LocalIpAddress: {localIp}");
            _logger.LogInformation($"Connection.RemoteIpAddress: {remoteIp}");

            _logger.LogInformation($"Bouncing Request Id: {data.Id}");
            _logger.LogInformation($"  => Target: {data.TargetUrl}");

            var protocol  = _accessor.ActionContext.HttpContext.Request.IsHttps ? "https" : "http";
            var bounceUrl = $"{protocol}://{_accessor.ActionContext.HttpContext.Request.Host}/{_accessor.ActionContext.HttpContext.Request.Path}";


            PingData result = new PingData
            {
                Id             = data.Id,
                BounceLocalIp  = localIp,
                BounceRemoteIp = remoteIp,
                PingRemoteIp   = data.PingRemoteIp,
                PingLocalIp    = data.PingLocalIp,
                PingerLocalIp  = data.PingerLocalIp,
                TargetUrl      = data.TargetUrl,
                PingUrl        = data.PingUrl,
                BounceUrl      = bounceUrl
            };

            _logger.LogInformation($"{data.Id} Bounced!");

            return(Ok(result));
        }
예제 #22
0
        internal static NormalCommand CreatePing(Action <CommandData> action)
        {
            var data = new PingData(action.ToFSharpFunc());

            return(NormalCommand.NewPing(data));
        }
예제 #23
0
 public async Task AddAsync(PingData pingData)
 => await Collection.InsertOneAsync(pingData);