private void OnServerAdded(Server <C> server) { try { if (server.FakeEndPoint != null) { fakeServers.Add(server.FakeEndPoint, server); if (ServerAdded != null) { ServerAdded(this, new ServerChangeEventArgs(server.FakeEndPoint)); } } if (ServerAdded != null) { ServerAdded(this, new ServerChangeEventArgs(server.LocalEndPoint)); } } catch (Exception ex) { throw new Exception(@"Error in ServerAdded event handler", ex); } }
private SocketError AddServers(IEnumerable <EndpointInfo> infos, bool ignoreErrors) { SocketError error = SocketError.Success; List <Server <C> > created = new List <Server <C> >(); foreach (var info in infos) { if (servers.ContainsKey(info.ServerEndPoint) == false) { IPEndPoint fakeEndpoint = null; if (info.ServerEndPoint.AddressFamily == AddressFamily.InterNetwork) { if (info.AddressInformation.IPv4Mask != null) { fakeEndpoint = FakeAddressAction(info.ServerEndPoint); } } var server = Server <C> .Create(info.ServerEndPoint, fakeEndpoint, info.AddressInformation.IPv4Mask, config); server.Received = Server_Received; server.Sent = Server_Sent; server.Failed = Server_Failed; server.NewConnection = Server_NewConnection; server.EndConnection = Server_EndConnection; server.BeforeSend = Server_BeforeSend; try { server.Start(); } catch (SocketException ex) { if (ignoreErrors) { OnServerInfo(new ServerInfoEventArgs(info.ServerEndPoint, ex)); } else { error = ex.SocketErrorCode; break; } } created.Add(server); } } if (ignoreErrors == false && created.Count == 0) { error = SocketError.SystemNotReady; } if (error != SocketError.Success) { foreach (var server in created) { server.Dispose(); } } else { foreach (var server in created) { servers.Add(server.LocalEndPoint, server); OnServerAdded(server); } } return(error); }