Exemple #1
0
        public bool Start(IPAddress bindAddress, IPAddress multicastAddress4, IPAddress multicastAddress6,
                          uint protocolVersion, uint requiredVersion)
        {
            if (Running)
            {
                return(false);
            }
            BindAddress       = bindAddress;
            MulticastAddress4 = multicastAddress4;
            MulticastAddress6 = multicastAddress6;
            ProtocolVersion   = protocolVersion;
            RequiredVersion   = requiredVersion;

            /// ToDo: Actually filter unspecified addresses like 0.0.0.0 or ::.
            if (bindAddress.AddressFamily == AddressFamily.InterNetwork ||
                bindAddress.AddressFamily == AddressFamily.InterNetworkV6)
            {
                var serviceSocket = new TcpListenerSocket();
                serviceSocket.Connected    += OnClientConnected;
                serviceSocket.Disconnected += OnClientDisconnected;
                serviceSocket.Listen(new IPEndPoint(bindAddress, ServicePort));
                _serviceSockets.Add(serviceSocket);

                var multicastSocket = new UdpSocket();
                multicastSocket.MessageReceived += OnMulticastReceive;
                multicastSocket.Open(new IPEndPoint(bindAddress, MulticastPort),
                                     (bindAddress.AddressFamily == AddressFamily.InterNetworkV6)
                    ? multicastAddress6
                    : multicastAddress4);
                _multicastSockets.Add(multicastSocket);
            }
            else
            {
                foreach (var address in NetworkHost.Instance.LocalAddresses())
                {
                    var serviceSocket = new TcpListenerSocket();
                    serviceSocket.Connected    += OnClientConnected;
                    serviceSocket.Disconnected += OnClientDisconnected;
                    serviceSocket.Listen(new IPEndPoint(address, ServicePort));
                    _serviceSockets.Add(serviceSocket);

                    var multicastSocket = new UdpSocket();
                    multicastSocket.MessageReceived += OnMulticastReceive;
                    multicastSocket.Open(new IPEndPoint(address, MulticastPort),
                                         (bindAddress.AddressFamily == AddressFamily.InterNetworkV6)
                      ? multicastAddress6
                      : multicastAddress4);
                    _multicastSockets.Add(multicastSocket);
                }
            }
            Console.WriteLine(String.Format("Started ServiceHost {0:X}", HostGuid));
            Running = true;
            return(Running);
        }