private Request BuildGetRequest(EndPointInfo endPointInfo) { var uri = ConstructEndpoint(endPointInfo); var signedUrl = SignHttpGetUrl(uri, endPointInfo); var getRequest = new Request(signedUrl, endPointInfo.Headers); return getRequest; }
private PostRequest BuildPostRequest(EndPointInfo endPointInfo) { var uri = ConstructEndpoint(endPointInfo); var signedParams = SignHttpPostParams(uri, endPointInfo); var postRequest = new PostRequest(uri, endPointInfo.Headers, signedParams); return postRequest; }
public bool Update(CorrelatedResSyncInfo info, IJetTransaction jetTransaction) { IEndPointTableAdapter EndPointTableAdapter = StoreEnvironment.Resolve <IEndPointTableAdapter>(this.Context); EndPointInfo EndPointInfo = EndPointTableAdapter.GetOrCreate(info.ResSyncInfo.EndPoint, jetTransaction); OleDbCommand oleDbCommand = jetTransaction.CreateOleCommand(); string sqlQuery = string.Empty; // store only correlation data if tick is set to -1 if (info.ResSyncInfo.Tick == -1) { sqlQuery = "UPDATE [{0}] SET [LocalId]=@LocalId WHERE (Uuid=@Uuid);"; oleDbCommand.CommandText = string.Format(sqlQuery, _correlatedResSyncTable.TableName); oleDbCommand.Parameters.AddWithValue("@LocalId", info.LocalId); oleDbCommand.Parameters.AddWithValue("@Uuid", info.ResSyncInfo.Uuid); } else { sqlQuery = "UPDATE [{0}] SET [tick]=@tick, [ModifiedStamp]=@ModifiedStamp, [Etag]=@Etag, [LocalId]=@LocalId , [FKEndPointId]=@EndPointId WHERE (Uuid=@Uuid);"; oleDbCommand.CommandText = string.Format(sqlQuery, _correlatedResSyncTable.TableName); oleDbCommand.Parameters.AddWithValue("@tick", info.ResSyncInfo.Tick); oleDbCommand.Parameters.AddWithValue("@ModifiedStamp", info.ResSyncInfo.ModifiedStamp.ToString()); oleDbCommand.Parameters.AddWithValue("@Etag", info.ResSyncInfo.Etag); oleDbCommand.Parameters.AddWithValue("@LocalId", info.LocalId); oleDbCommand.Parameters.AddWithValue("@EndPointId", EndPointInfo.Id); oleDbCommand.Parameters.AddWithValue("@Uuid", info.ResSyncInfo.Uuid); } return(0 != oleDbCommand.ExecuteNonQuery()); }
public EndPointInfo GetOrCreate(string EndPoint, IJetTransaction jetTransaction) { EndPointInfo resultInfo = null; OleDbCommand oleDbCommand = jetTransaction.CreateOleCommand(); oleDbCommand.CommandText = string.Format("SELECT [ID] FROM {0} WHERE [EndPoint]=@EndPoint;", _EndPointTable.TableName); oleDbCommand.Parameters.AddWithValue("@EndPoint", EndPoint); using (OleDbDataReader reader = oleDbCommand.ExecuteReader(CommandBehavior.SingleRow)) { if (!reader.HasRows) { resultInfo = this.Add(EndPoint, jetTransaction); } else { reader.Read(); int id = Convert.ToInt32(reader["ID"]); resultInfo = new EndPointInfo(id, EndPoint); } } return(resultInfo); }
private string SignHttpGetUrl(string uri, EndPointInfo endPointInfo) { if (endPointInfo.IsSigned) { return _urlSigner.SignGetUrl(uri, endPointInfo.UserToken, endPointInfo.UserSecret, _oAuthCredentials); } return uri; }
private IDictionary<string, string> SignHttpPostParams(string uri, EndPointInfo endPointInfo) { if (endPointInfo.IsSigned) { return _urlSigner.SignPostRequest(uri, endPointInfo.UserToken, endPointInfo.TokenSecret, _oAuthCredentials, endPointInfo.Parameters); } return endPointInfo.Parameters; }
public void IPChanged(string text) { if (!string.IsNullOrEmpty(text)) { EndPointInfo ep = CardNetworkManager.Instance.CurrentEndPoint; ep.IP = text; CardNetworkManager.Instance.CurrentEndPoint = ep; } }
private void OnMasterServerFoundMatch(MasterServerAPI.ServerInstanceResultPacket serverinstance) { EndPointInfo ep = new EndPointInfo(GameInitializer.Master.Info.Address.IP, serverinstance.Port); ServerInstance = ep; TimeStamp = LastUpdateTimestamp; DisplayTimestamp = false; UpdateQueueStatus = true; SetText("Found Match on Instance: " + serverinstance); }
public virtual string ConstructEndpoint(EndPointInfo endPointInfo) { var apiUri = endPointInfo.UseHttps ? _apiUri.SecureUri : _apiUri.Uri; var newDictionary = endPointInfo.Parameters.ToDictionary(entry => entry.Key, entry => entry.Value); var uriString = string.Format("{0}/{1}", apiUri, SubstituteRouteParameters(endPointInfo.UriPath, newDictionary)); uriString = uriString + AdditionalParameters(newDictionary); return uriString; }
/// <summary> /// 转发报警到上级 /// </summary> /// <param name="alarmLog"></param> private void ForwardAlarmToTopOrganization(AlarmLog alarmLog) { Task.Run(() => { using (var db = new AllInOneContext.AllInOneContext()) { string error = ""; var topApplicationCenter = db.Organization.Include(t => t.Center). OrderBy(t => t.OrganizationFullName). Select(t => t.Center). FirstOrDefault(); if (topApplicationCenter != null && topApplicationCenter.EndPoints != null && topApplicationCenter.EndPoints.Count > 0) { _logger.LogInformation("开始推送{1}发生的{2}报警消息到上级系统...", alarmLog.AlarmSource.IPDeviceName, alarmLog.AlarmType.SystemOptionName); EndPointInfo endPoint = topApplicationCenter.EndPoints.First(); string url = string.Format("http://{0}:{1}/Alarm/AlarmLog/Publish", endPoint.IPAddress, endPoint.Port); _logger.LogInformation("推送URL:{0}...", url); var result = HttpClientHelper.Post <AlarmLog>(alarmLog, url, false); if (result.Success) { alarmLog.UploadStatus = 1; db.SaveChanges(); _logger.LogInformation("报警消息推送到上级系统成功"); } else { _logger.LogInformation("报警消息推送到上级系统失败,原因:{0},将推送添加到报警转发队列", result); ForwardAlarmLogTask.Instance.ForwardAlarmLog(alarmLog); } } else { error = "未配置上级应用服务"; } if (!string.IsNullOrEmpty(error)) { error = string.Format("由于{0},推送{1}发生的{2}报警消息到上级系统失败!", error, alarmLog.AlarmSource.IPDeviceName, alarmLog.AlarmType.SystemOptionName); ForwardAlarmLogError forwardErr = new ForwardAlarmLogError() { ErrorDesc = error, CreateTime = DateTime.Now }; MQPulish.PublishMessage("ForwardAlarmLogError", forwardErr); //改为提示..... } } }); }
/// <summary> /// key节点名称,nodecount虚拟节点个数 /// </summary> /// <param name="endPoint"></param> /// <param name="nodecount"></param> protected virtual void AddNode(EndPointInfo endPoint, int nodecount) { nodecount = nodecount / 4; for (int i = 0; i < nodecount; i++) { byte[] temp = ComputeMd5(string.Format("{0}{1}", endPoint.Name, i)); for (int k = 0; k < 4; k++) { int m = Hash(temp, k); Nodes[m] = endPoint; } } }
public AuthenticationForm(EndPointInfo endpointInfo) { _endpointInfo = endpointInfo; InitializeComponent(); if (_endpointInfo.Url != null) { lblUrl.Text = _endpointInfo.Url.ToString(); } if (_endpointInfo.Credentials != null) { this.txtUser.Text = _endpointInfo.Credentials.User; this.txtPassword.Text = _endpointInfo.Credentials.Password; } }
public IActionResult Add([FromBody] AlarmProcessed processInfo) { if (processInfo == null) { return(BadRequest()); } using (var db = new AllInOneContext.AllInOneContext()) { try { _logger.LogInformation("开始添加报警处理意见..."); db.AlarmProcessed.Add(processInfo); db.SaveChanges(); //推送处理结果到上级服务 //获取上级服务器的依据:按组织机构长地址排序,取第一个组织机构的应用中心信息 var topApplicationCenter = db.Organization.Include(t => t.Center). OrderBy(t => t.OrganizationFullName). Select(t => t.Center). FirstOrDefault(); if (topApplicationCenter != null && topApplicationCenter.EndPoints != null && topApplicationCenter.EndPoints.Count > 0) { _logger.LogInformation("发送报警处理到上级平台..."); EndPointInfo endPoint = topApplicationCenter.EndPoints.First(); string url = string.Format("http://{0}:{1}/Alarm/AlarmProcessed/Publish", endPoint.IPAddress, endPoint.Port); var result = HttpClientHelper.Post <AlarmProcessed>(processInfo, url); _logger.LogInformation("发送报警处理到上级平台...result:{0}", result); } else { Console.WriteLine("未配置上级应用服务,未能完成发送报警处理到上级系统"); } //本地广播报警处理消息 _logger.LogInformation("广播报警处理消息"); MQPulish.PublishMessage("AlarmProcess", processInfo); _logger.LogInformation("完成添加报警处理意见..."); return(CreatedAtRoute("GetById", processInfo)); } catch (Exception ex) { _logger.LogError("添加报警处理意见异常,Message:{0}\r\n,StackTrace{1}", ex.Message, ex.StackTrace); return(BadRequest(ex)); } } }
private static async Task Go(EndPointInfo endpoint) { var keys = GetAppCredentials(endpoint.Name); IDeviceOAuth2 auth = new DeviceOAuth(endpoint, (string)keys.scopes, (string)keys.client_id, (string)keys.client_secret); auth.WaitingForConfirmation += (o, e) => { Console.CursorLeft = 0; Console.Write(e + " seconds left "); }; auth.PromptUser += (o, e) => { Console.WriteLine(""); Console.WriteLine("Go to this url on any computer:"); Console.WriteLine(e.VerificationUri); Console.WriteLine("And enter this code:"); Console.WriteLine(e.UserCode); Console.WriteLine(""); }; Console.WriteLine("Authenticating..."); try { var token = await auth.Authorize(null); dynamic profile = await auth.GetProfile(token); Console.WriteLine(""); Console.WriteLine("Name = " + profile.name); } catch (AggregateException e) { Console.WriteLine("Error:"); foreach (var inner in e.InnerExceptions) { Console.WriteLine(inner.Message); } } catch (Exception e) { Console.WriteLine("Error:"); Console.WriteLine(e.Message); } }
private bool CheckSyncDigest(HttpClient httpClient, string resource, EndPointInfo endpoint) { string tmpUrl = endpoint.GetResourceUri(resource).ToString(); tmpUrl = string.Format("{0}/{1}?runName={2}&runStamp={3}", tmpUrl, "$syncDigest", "testDigest", this.RunStamp.ToUniversalTime()); HttpResponseMessage respMsg = httpClient.Get(tmpUrl); respMsg.Content.LoadIntoBuffer(); if (respMsg.StatusCode == HttpStatusCode.OK) { return(true); } this.Logger.Write(string.Format("The Resource {0} is not accessable", resource), Severity.Error); this.Logger.Write(string.Format("on following root url {0}", endpoint.UrlString), Severity.Error); return(false); }
public ICorrelatedResSyncInfoEnumerator GetSincetick(string resourceKind, string EndPoint, int tick) { CorrelatedResSyncInfo[] resultInfos; ICorrelatedResSyncTableAdapter correlatedResSyncTableAdapter = this.GetAdapter(resourceKind); IEndPointTableAdapter EndPointTableAdapter = StoreEnvironment.Resolve <IEndPointTableAdapter>(_context); using (IJetTransaction jetTransaction = _jetConnectionProvider.GetTransaction(false)) { EndPointInfo EndPointInfo = EndPointTableAdapter.GetOrCreate(EndPoint, jetTransaction); resultInfos = correlatedResSyncTableAdapter.GetSincetick(EndPointInfo.Id, tick, jetTransaction); jetTransaction.Commit(); } return((null != resultInfos) ? new CorrelatedResSyncInfoEnumerator(resultInfos) : new CorrelatedResSyncInfoEnumerator(new CorrelatedResSyncInfo[0])); }
public SyncDigestEntryInfo Get(string resourceKind, string EndPoint) { SyncDigestEntryInfo resultInfo = null; ISyncDigestTableAdapter syncDigestTableAdapter = StoreEnvironment.Resolve <ISyncDigestTableAdapter>(_context); IResourceKindTableAdapter resourceKindTableAdapter = StoreEnvironment.Resolve <IResourceKindTableAdapter>(_context); IEndPointTableAdapter EndPointTableAdapter = StoreEnvironment.Resolve <IEndPointTableAdapter>(_context); using (IJetTransaction jetTransaction = _jetConnectionProvider.GetTransaction(false)) { ResourceKindInfo resourceKindInfo = resourceKindTableAdapter.GetOrCreate(resourceKind, jetTransaction); EndPointInfo EndPointInfo = EndPointTableAdapter.GetOrCreate(EndPoint, jetTransaction); resultInfo = syncDigestTableAdapter.Get(resourceKindInfo.Id, EndPointInfo.Id, jetTransaction); jetTransaction.Commit(); } return(resultInfo); }
private ServiceInfo GetServiceInfo(string wsdl) { var proxyFactoryGenerator = new ServiceClientProxyFactoryGenerator( new ServiceMetadataDownloader(), new ServiceMetadataImporter( new CSharpCodeDomProviderFactory()), new ServiceClientProxyCompiler()); var proxyFactory = proxyFactoryGenerator.GenerateProxyFactory(wsdl); var serviceInfo = new ServiceInfo { Wsdl = wsdl, Config = proxyFactory.Config }; var serviceEndpoints = proxyFactory.Endpoints; foreach (var serviceEndpoint in serviceEndpoints) { var contractDescription = serviceEndpoint.Contract; var contractName = contractDescription.Name; var proxy = proxyFactory.CreateProxy(serviceEndpoint); var operationNames = contractDescription.Operations.Select(x => x.Name).ToArray(); var contractInfo = new ContractInfo { Proxy = proxy, ContractName = contractName }; var endPointInfo = new EndPointInfo { BindingName = serviceEndpoint.Binding.Name, ContractInfo = contractInfo }; foreach (var operationName in operationNames) { var instance = proxy.CreateInstance(); using (instance as IDisposable) { var method = ReflectionUtils.GetMethodDefinition(instance, operationName); contractInfo.Operations.Add(new OperationInfo { Contract = contractInfo, Method = method }); } } serviceInfo.EndPoints.Add(endPointInfo); } return(serviceInfo); }
public void Should_fire_resolve_with_correct_values() { A.CallTo(() => _urlResolver.Resolve(A <Uri> .Ignored, A <string> .Ignored, A <WebHeaderCollection> .Ignored)) .Returns("<response status=\"ok\" version=\"1.2\" ><serviceStatus><serverTime>2011-03-04T08:10:29Z</serverTime></serviceStatus></response>"); const string expectedMethod = "GET"; var expectedHeaders = new WebHeaderCollection(); var endPointState = new EndPointInfo() { Uri = "test", HttpMethod = expectedMethod, Headers = expectedHeaders }; var expected = new Uri(string.Format("{0}/test?oauth_consumer_key={1}", _apiUrl, _consumerKey)); _endpointResolver.HitEndpoint(endPointState); A.CallTo(() => _urlResolver.Resolve(A <Uri> .That.Matches(x => x.PathAndQuery == expected.PathAndQuery), expectedMethod, A <WebHeaderCollection> .Ignored)) .MustHaveHappened(); }
public void Can_get_an_artists_releases() { const string endpoint = "artist/releases"; var endPointInfo = new EndPointInfo { Uri = endpoint, Parameters = new NameValueCollection { { "artistId", "1" } } }; string xml = _endpointResolver.GetRawXml(endPointInfo); dynamic dx = new DynamicXmlParser(xml); var name = dx.releases.release[0].title.Value; var secondName = dx.releases.release[1].title.Value; Assert.That(name, Is.EqualTo("Night Train")); Assert.That(secondName, Is.EqualTo("Crystal Ball")); }
private HttpClient GetHttpClient(EndPointInfo endpoint, ProxyInfo proxy, string resource) { HttpClient result = new HttpClient(); result.BaseAddress = endpoint.GetResourceUri(resource); if ((endpoint.Credentials != null) && (!String.IsNullOrEmpty(endpoint.Credentials.User))) { result.TransportSettings.Credentials = new NetworkCredential(endpoint.Credentials.User, endpoint.Credentials.Password); } if ((proxy != null) && (!String.IsNullOrEmpty(proxy.Host))) { WebProxy webProxy = new WebProxy(proxy.Host, proxy.Port); if ((proxy.Credentials != null) && (!String.IsNullOrEmpty(proxy.Credentials.User))) { webProxy.Credentials = new NetworkCredential(proxy.Credentials.User, proxy.Credentials.Password); } result.TransportSettings.Proxy = webProxy; } result.TransportSettings.ConnectionTimeout = new TimeSpan(0, 5, 0); return(result); }
private EndPointInfo Add(string EndPoint, IJetTransaction jetTransaction) { EndPointInfo resultInfo = null; OleDbCommand oleDbCommand = jetTransaction.CreateOleCommand(); oleDbCommand.CommandText = string.Format("INSERT INTO [{0}] ([EndPoint]) VALUES (@EndPoint);", _EndPointTable.TableName); oleDbCommand.Parameters.AddWithValue("@EndPoint", EndPoint); oleDbCommand.ExecuteNonQuery(); oleDbCommand.Parameters.Clear(); oleDbCommand.CommandText = string.Format("SELECT @@IDENTITY FROM [{0}];", _EndPointTable.TableName); oleDbCommand.CommandType = CommandType.Text; int newId = (int)oleDbCommand.ExecuteScalar(); resultInfo = new EndPointInfo(newId, EndPoint); return(resultInfo); }
public void Insert(CorrelatedResSyncInfo info, IJetTransaction jetTransaction) { IEndPointTableAdapter EndPointTableAdapter = StoreEnvironment.Resolve <IEndPointTableAdapter>(this.Context); EndPointInfo EndPointInfo = EndPointTableAdapter.GetOrCreate(info.ResSyncInfo.EndPoint, jetTransaction); OleDbCommand oleDbCommand = jetTransaction.CreateOleCommand(); string sqlQuery = string.Empty; sqlQuery = "INSERT INTO {0} ([Uuid], [tick], [ModifiedStamp], [Etag], [LocalId], [FKEndPointId], [FKResourceKindId]) VALUES (@Uuid, @tick, @ModifiedStamp, @Etag, @LocalId, @EndPointId, @ResourceKindId);"; oleDbCommand.CommandText = string.Format(sqlQuery, _correlatedResSyncTable.TableName); oleDbCommand.Parameters.AddWithValue("@Uuid", info.ResSyncInfo.Uuid); oleDbCommand.Parameters.AddWithValue("@tick", info.ResSyncInfo.Tick); oleDbCommand.Parameters.AddWithValue("@ModifiedStamp", info.ResSyncInfo.ModifiedStamp.ToString()); oleDbCommand.Parameters.AddWithValue("@Etag", info.ResSyncInfo.Etag); oleDbCommand.Parameters.AddWithValue("@LocalId", info.LocalId); oleDbCommand.Parameters.AddWithValue("@EndPointId", EndPointInfo.Id); oleDbCommand.Parameters.AddWithValue("@ResourceKindId", _correlatedResSyncTable.ResourceKindId); oleDbCommand.ExecuteNonQuery(); }
public void Can_get_an_artist() { const string endpoint = "artist/details"; var endPointInfo = new EndPointInfo { Uri = endpoint, Parameters = new NameValueCollection { { "artistId", "1" } } }; string xml = _endpointResolver.GetRawXml(endPointInfo); dynamic dx = new DynamicXmlParser(xml); var name = dx.artist[0].name.Value; var sortName = dx.artist[0].sortName.Value; var url = dx.artist[0].url.Value; Assert.That(name, Is.EqualTo("Keane")); Assert.That(sortName, Is.EqualTo("Keane")); Assert.That(url, Is.StringStarting("http://www.7digital.com/artists/keane/")); }
public override IResponse HitEndpoint(EndPointInfo endPointInfo) { var getRequest = BuildGetRequest(endPointInfo); return HttpClient.Get(getRequest); }
/// <summary> /// key节点名称,nodecount虚拟节点个数 /// </summary> /// <param name="endPoint"></param> protected virtual void AddNode(EndPointInfo endPoint) { Nodes.Add(Nodes.Count + 1, endPoint); }
public override void HitEndpointAsync(EndPointInfo endPointInfo, Action<Response> action) { var postRequest = BuildPostRequest(endPointInfo); HttpClient.PostAsync(postRequest,response => action(response)); }
public abstract IResponse HitEndpoint(EndPointInfo endPointInfo);
public abstract void HitEndpointAsync(EndPointInfo endPointInfo, Action<IResponse> action);
public override Response HitEndpoint(EndPointInfo endPointInfo) { var postRequest = BuildPostRequest(endPointInfo); return HttpClient.Post(postRequest); }
EndPointInfo GetEndPointInfo(EndPoint remote) { EndPointInfo info; bool usePool = (_idleCheckThread != null); lock (_map) { if (!_map.TryGetValue (remote, out info)) { info = new EndPointInfo (remote, _maxConnectionsPerServer, _maxRequestsPerConnection, usePool); _map.Add (remote, info); } } return info; }
public Gateway(IEndPoint endPoint, Uri uri, ILogger logger) { _endPointInfo = new EndPointInfo(endPoint, uri, logger); }
public override void HitEndpointAsync(EndPointInfo endPointInfo, Action<IResponse> action) { var getRequest = BuildGetRequest(endPointInfo); HttpClient.GetAsync(getRequest, response => action(response)); }
public void Run() { Task.Factory.StartNew(() => { _logger.LogInformation("Start forward alarmlog task......"); while (true) { if (m_alarmLogList.Count == 0) { m_forwardWaiter.WaitOne(-1); } using (var db = new AllInOneContext.AllInOneContext()) { //默认第一个为本地应用中心节点() var topApplicationCenter = db.Organization.Include(t => t.Center). OrderBy(t => t.OrganizationFullName).Select(t => t.Center). FirstOrDefault(); if (topApplicationCenter == null || topApplicationCenter.EndPoints == null || topApplicationCenter.EndPoints.Count == 0) { _logger.LogInformation("未配置上级服务器IP,报警上传等待10 min后再检测......"); m_forwardWaiter.WaitOne(10 * 60000); continue; } EndPointInfo endPoint = topApplicationCenter.EndPoints.First(); string url = string.Format("http://{0}:{1}/Alarm/AlarmLog/Publish", endPoint.IPAddress, endPoint.Port); //上传报警记录 string error = ""; lock (m_logLockObj) { for (int i = m_alarmLogList.Count - 1; i >= 0; i--) { AlarmLog log = m_alarmLogList[i]; if (log.UploadCount < 10) { var result = HttpClientHelper.Post <AlarmLog>(log, url); if (result.Success) { log.UploadStatus = 1; //上传完成 } else { log.UploadCount++; } db.AlarmLog.Update(log); db.SaveChanges(); m_alarmLogList.RemoveAt(i); } else if (log.UploadCount == 10) { //上传次数达到10次,记录.... log.UploadCount++; db.AlarmLog.Update(log); db.SaveChanges(); m_alarmLogList.Remove(log); //广播消息 error = string.Format("多次尝试推送报警失败,取消推送{0}发生的{1}报警消息到上级系统!", log.AlarmSource.IPDeviceName, log.AlarmType.SystemOptionName); ForwardAlarmLogError forwardErr = new ForwardAlarmLogError() { ErrorDesc = error, CreateTime = DateTime.Now }; MQPulish.PublishMessage("ForwardAlarmLogError", forwardErr); } } } } // m_uploadWaiter.WaitOne(10 * 1000); } }); }
void Setup(IMessagingSocket sock) { sock.InquirySuccess += delegate (object sender, InquiredEventArgs e) { IPEndPoint ipep = e.EndPoint as IPEndPoint; if (ipep == null) return; lock (_messagingStatistics) { EndPointInfo info; if (!_messagingStatistics.TryGetValue (ipep, out info)) { info = new EndPointInfo (ipep); _messagingStatistics.Add (ipep, info); } info.SD.AddSample ((float)e.RTT.TotalMilliseconds); info.Success ++; info.Retries += e.Retries; } }; sock.InquiryFailure += delegate (object sender, InquiredEventArgs e) { IPEndPoint ipep = e.EndPoint as IPEndPoint; if (ipep == null) return; lock (_messagingStatistics) { EndPointInfo info; if (!_messagingStatistics.TryGetValue (ipep, out info)) { info = new EndPointInfo (ipep); _messagingStatistics.Add (ipep, info); } info.Fail ++; } }; }