示例#1
0
        public void Start(Action <IWebSocketConnection> config)
        {
            if (CheckIfPortAvailable(Port))
            {
                var ipLocal = new IPEndPoint(_locationIP, Port);
                ListenerSocket.Bind(ipLocal);
                ListenerSocket.Listen(100);
                Port = ((IPEndPoint)ListenerSocket.LocalEndPoint).Port;
                FleckLog.Info(string.Format("Server started at {0} (actual port {1})", Location, Port));
                if (_scheme == "wss")
                {
                    if (Certificate == null)
                    {
                        FleckLog.Error("Scheme cannot be 'wss' without a Certificate");
                        return;
                    }

                    if (EnabledSslProtocols == SslProtocols.None)
                    {
                        EnabledSslProtocols = SslProtocols.Tls;
                        FleckLog.Debug("Using default TLS 1.0 security protocol.");
                    }
                }
                ListenForClients();
                _config = config;
            }
            else
            {
                FleckLog.Error(string.Format("Server cannot start port {0}, port already in use", Port));
                throw new Exception("Error: listen EADDRINUSE: address already in use :::" + Port);
            }
        }
示例#2
0
        public void Shutdown()
        {
            ListenerSocket?.Close();
            ListenerSocket = null;

            Loop.Stop();
        }
示例#3
0
        public void Start(Action <IWebSocketConnection> config)
        {
            var ipLocal = new IPEndPoint(_locationIP, Port);

            ListenerSocket.Bind(ipLocal);
            ListenerSocket.Listen(100);
            Port = ((IPEndPoint)ListenerSocket.LocalEndPoint).Port;
            FleckLog.Info(string.Format("Server started at {0} (actual port {1})", Location, Port));
            if (_scheme == "wss")
            {
                if (Certificate == null)
                {
                    FleckLog.Error("Scheme cannot be 'wss' without a Certificate");
                    return;
                }

                if (EnabledSslProtocols == SslProtocols.None)
                {
                    EnabledSslProtocols = SslProtocols.Tls;
                    FleckLog.Debug("Using default TLS 1.0 security protocol.");
                }
            }
            ListenForClients();
            _config = config;
        }
        public void SomeoneIsConnecting(string IPaddress, string Name)
        {
            ConnectedUser tmp = new ConnectedUser();

            tmp.Ip         = IPaddress;
            tmp.Name       = Name;
            tmp.MyNumber   = connectedUsers.Count + 1;
            tmp.HasControl = false;
            MTObservableCollection <ConnectedUser> newList = new MTObservableCollection <ConnectedUser>();

            newList = connectedUsers;
            newList.Add(tmp);
            connectedUsers = new MTObservableCollection <ConnectedUser>();
            connectedUsers = newList;
            this.RaisePropertyChanged("ConnectedUsers");
            SocketMessage socketMessage = new SocketMessage();

            socketMessage.Port        = (listenerSockets.Count + 12001).ToString();
            socketMessage.MessageType = "PortInformation";
            talkerSocket = new TalkerSocket(IPaddress, ClientUnderlyingListenerPort);
            ListenerSocket newListenSocket = new ListenerSocket(Int32.Parse(socketMessage.Port), this);

            listenerSockets.Add(newListenSocket);
            listenerSockets.ElementAt(listenerSockets.Count - 1).StartListening();
            talkerSocket.sendData(socketMessage);
            viewShouldUpdate = true;
        }
示例#5
0
        private void ListenForClients()
        {
            ManualResetEvent acceptDone = new ManualResetEvent(false);
            bool             running    = true;

            Task.Run(() => {
                while (running)
                {
                    acceptDone.Reset();

                    var task = ListenerSocket.Accept(
                        s => {
                        running = (s != null);
                        acceptDone.Set();
                        OnClientConnect(s);
                    },
                        e => { FleckLog.Error("Error while listening for new clients", e);
                               if (RestartAfterListenError)
                               {
                                   TryRestart();
                               }
                               running = false; acceptDone.Set(); }
                        );

                    task.ContinueWith((t) => FleckLog.Warn("Error during client connect", t.Exception),
                                      TaskContinuationOptions.OnlyOnFaulted);

                    acceptDone.WaitOne();
                }
            });
        }
示例#6
0
        public void Start(Action <IWebsocketConnection> callsbacks)
        {
            _callbacks = callsbacks;

            var ipLocal = new IPEndPoint(BindIp, LocalUri.Port);

            ListenerSocket.Bind(ipLocal);
            ListenerSocket.Listen(100);

            Console.WriteLine("Websocket Server Started at " + LocalUri);

            if (LocalUri.Scheme == "wss")
            {
                if (Certificate == null)
                {
                    throw new Exception("Cannot use secure mode 'wss' without a Certificate.");
                }

                if (EnabledSslProtocols == SslProtocols.None)
                {
                    EnabledSslProtocols = SslProtocols.Tls;
                    Console.WriteLine("Using default TLS 1.0.");
                }
            }

            ListenForClients();
        }
示例#7
0
        // a new client is trying to connect
        private void OnClientConnect(IAsyncResult ar)
        {
            Socket clientSocket = null;

            try
            {
                clientSocket = ListenerSocket.EndAccept(ar);
            }
            catch
            {
                Log.Error("Listener socket is closed");
                return;
            }

            var shaker = new HandshakeHandler(Origin, Location);

            // shake hands - and provide a callback for when hands has been shaken
            shaker.Shake(clientSocket, (handshake) =>
            {
                // instantiate the connection and subscribe to the events
                var wsc = new WebSocketConnection(clientSocket, handshake);

                // fire the connected event
                if (OnConnect != null)
                {
                    OnConnect(wsc);
                }

                // start looking for data
                wsc.StartReceiving();
            });

            // listen some more
            ListenForClients();
        }
        private void OnClientConnect(IAsyncResult asyn)
        {
            Console.WriteLine("WebSocketServer(): in OnClientConnect()..");

            // create a new socket for the connection
            var clientSocket = ListenerSocket.EndAccept(asyn);

            // shake hands to give the new client a warm welcome
            ShakeHands(clientSocket);

            // keep track of the new guy
            var clientConnection = new WebSocketConnection(clientSocket);

            Connections.Add(clientConnection);
            clientConnection.Disconnected += new WebSocketConnection.WebSocketDisconnectedEventHandler(ClientDisconnected);

            // invoke the connection event
            if (ClientConnected != null)
            {
                ClientConnected(clientConnection, EventArgs.Empty);
            }

            clientConnection.DataReceived += new WebSocketConnection.DataReceivedEventHandler(DataReceivedFromClient);

            // listen for more clients
            ListenForClients();
        }
示例#9
0
 private void ListenForClients()
 {
     ListenerSocket.Accept(
         OnClientConnect,
         e => {
         FleckLog.Error("Listener socket is closed", e);
         if (RestartAfterListenError)
         {
             FleckLog.Info("Listener socket restarting");
             try
             {
                 ListenerSocket.Dispose();
                 var socket     = new Socket(_locationIP.AddressFamily, SocketType.Stream, ProtocolType.IP);
                 ListenerSocket = new SocketWrapper(socket);
                 Start(_config);
                 FleckLog.Info("Listener socket restarted");
             }
             catch (Exception ex)
             {
                 FleckLog.Error("Listener could not be restarted", ex);
             }
         }
     }
         );
 }
示例#10
0
 private void ConnectToMasterButtonClick(object sender, EventArgs e)
 {
     //listen for master
     listenerSocket = new ListenerSocket(port, this);
     listenerSocket.StartListening();
     ConnectToMasterButton.Enabled = false;
 }
示例#11
0
 /// <summary>
 /// A function for shutting down the server.
 /// </summary>
 public virtual void Shutdown()
 {
     //// Shutdown and end connection
     ListenerSocket.Stop();
     Console.WriteLine(" >> Server " + Id + " is shutting down...");
     Console.ReadLine();
 }
示例#12
0
        private void ListenForClients()
        {
            ListenerSocket.Accept(OnClientConnect, e => {
                Console.WriteLine("Listener socket is closed. " + e.Message);

                if (!RestartAfterListenError)
                {
                    return;
                }

                Console.WriteLine("Listener socket restarting");
                try
                {
                    ListenerSocket.Dispose();
                    var socket     = new Socket(BindIp.AddressFamily, SocketType.Stream, ProtocolType.IP);
                    ListenerSocket = new SocketWrapper(socket);
                    Start(_callbacks);
                    Console.WriteLine("Listener socket restarted");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Listener could not be restarted. " + ex.Message);
                }
            });
        }
示例#13
0
 public virtual void Stop()
 {
     if (ListenerSocket != null)
     {
         ListenerSocket.Dispose();
         ListenerSocket = null;
     }
 }
        public MainPage()
        {
            this.InitializeComponent();

            ListenerSocket listener = NetworkingLibaryCore.GetListener(this);

            listener.Start();
        }
示例#15
0
        public void run()
        {
            ListenerSocket listener = NetworkingLibaryCore.GetListener(this);

            listener.Start();

            Console.ReadLine();
        }
示例#16
0
        public ISocket Connect(Action <IConnection> config)
        {
            var ipLocal = new IPEndPoint(_locationIP, Port);

            ListenerSocket.Connect(ipLocal);
            _config = config;
            return(ListenerSocket);
        }
示例#17
0
 public void Stop()
 {
     if (ListenerSocket != null)
     {
         ListenerSocket.Dispose();
         ListenerSocket = null;
     }
     //需全部入队操作
 }
示例#18
0
        public void StopServer()
        {
            if (_socket != null)
            {
                _socket.Dispose();
            }

            _socket = null;
        }
        public void StartButtonCommand()
        {
            ListenerSocket tmp = new ListenerSocket(MyUnderlyingListenerPort, this);

            listenerSockets.Add(tmp);
            isStartConsoleButtonEnabled = false;
            listenerSockets.ElementAt(0).StartListening();
            viewShouldUpdate = true;
        }
示例#20
0
        public void Start()
        {
            ListenerSocket.Bind(_ipEndPoint);
            ListenerSocket.Listen(100);

            FleckLog.Info("Policy-Server started at " + Location);

            ListenForClients();
        }
示例#21
0
        private void LocalHostDemo()
        {
            // start the listener socket
            ListenerSocket listener = NetworkingLibaryCore.GetListener(this);

            listener.Start();

            SetUpConnection();
        }
示例#22
0
        public void Shutdown()
        {
            AuthCommunicator?.Close();
            AuthCommunicator = null;

            ListenerSocket?.Close();
            ListenerSocket = null;

            Loop.Stop();
        }
示例#23
0
 static void Run()
 {
     using (var server = new ListenerSocket(ServerPort))
     {
         server.Accept += ServerAccept;
         server.Active  = true;
         Console.WriteLine("Color server is running. Press enter to quit.");
         Console.ReadLine();
     }
 }
示例#24
0
        private void OnAccept(LengthedSocket newSocket)
        {
            ListenerSocket.AcceptAsync();

            if (newSocket == null)
            {
                return;
            }

            LoginManager.LoginSocket(newSocket);
        }
示例#25
0
        /// <summary>
        /// 开始监听
        /// </summary>
        /// <param name="config"></param>
        public void Start(Action <IConnection> config)
        {
            var ipLocal = new IPEndPoint(IPAddress.Any, Port);

            ListenerSocket.Bind(ipLocal);
            ListenerSocket.Listen(100);
            Port = ((IPEndPoint)ListenerSocket.LocalEndPoint).Port;

            ListenForClients();
            byte[] buffer = new byte[245];
            _config = config;
        }
示例#26
0
        private void OnAccept(LengthedSocket newSocket)
        {
            ListenerSocket.AcceptAsync();

            if (newSocket == null)
            {
                return;
            }

            lock (Clients)
                Clients.Add(new Client(newSocket, this, _authUnitOfWorkFactory));
        }
示例#27
0
        public void Start(Action <ISocketConnection> config)
        {
            this.config = config;

            var ipLocal = new IPEndPoint(IPAddress.Any, Port);

            ListenerSocket.Bind(ipLocal);
            ListenerSocket.Listen(100);

            Logger.Debug("Socket Server started");

            ListenForClients();
        }
示例#28
0
 private void TryRestart()
 {
     FleckLog.Info("Listener socket restarting");
     try {
         ListenerSocket.Dispose();
         var socket = new Socket(_locationIP.AddressFamily, SocketType.Stream, ProtocolType.IP);
         ListenerSocket = new SocketWrapper(socket);
         Start(_config);
         FleckLog.Info("Listener socket restarted");
     } catch (Exception ex) {
         FleckLog.Error("Listener socket could not be restarted", ex);
     }
 }
示例#29
0
        /// <summary>
        /// Processes all incoming requests
        /// </summary>
        private void _RequestListener()
        {
            try
            {
                // Accept connection as long as stop request is not posted
                while (!StopRequested)
                {
                    // Check if we have a connection request pending
                    if (ListenerSocket.Pending())
                    {
                        try
                        {
                            // Accept the connection
                            TcpClient newConnection = ListenerSocket.AcceptTcpClient();

                            // Create a new connection
                            T connection = CreateConnection(newConnection);

                            // Assign a log
                            connection.EventLog = EventLog;

                            // Subscribe for notifications
                            connection.OnConnectionClosed += new ConnectionClosedEventHandler(_OnConnectionClosed);

                            // Start a connection
                            connection.Start();

                            // Synchronize access to connections collection
                            lock (Connections)
                            {
                                // Register a new connection
                                Connections.Add(connection);
                            }
                        }
                        catch (Exception ex)
                        {
                            Log(ex.ToString());
                        }
                    }
                    else
                    {
                        // Pause a bit
                        Thread.Sleep(10);
                    }
                }
            }
            catch (Exception ex)
            {
                Log(ex.ToString());
            }
        }
示例#30
0
        internal void SomeoneIsConnecting(string IPaddress, string Name)
        {
            User1Label.Text = "User1 : " + Name + " has connected with an IP address of " + IPaddress;
            SocketMessage socketMessage = new SocketMessage();

            socketMessage.Port        = (listenerSockets.Count + 12001).ToString();
            socketMessage.MessageType = "PortInformation";
            talkerSocket = new TalkerSocket(IPaddress, ClientUnderlyingListenerPort);
            ListenerSocket newListenSocket = new ListenerSocket(Int32.Parse(socketMessage.Port), this);

            listenerSockets.Add(newListenSocket);
            listenerSockets.ElementAt(listenerSockets.Count - 1).StartListening();
            talkerSocket.sendData(socketMessage);
        }
示例#31
0
 void ListenForTcpMessages()
 {
     listener = new ListenerSocket("127.0.0.1", 4999, new ConfigMessagesDispatcher());
     listener.Listen();
 }