Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
        }