Inheritance: System.EventArgs
        public void stopServer()
        {
            if (tcpListener != null && serverThread != null && lobby != null)
            {
                serverThread.Abort();

                foreach (ServerClient client in lobby.getClientlist()) lobby.remove(client);

                idCounter = 0;
                tcpListener.Stop();
            }

            ServerInfoEventArgs args = new ServerInfoEventArgs();
            args.consoleinfo = "Server Closed Successfully!\n";
            OnNeedLog(args);
        }
        private void acceptConnection(Int32 _inputsize)
        {
            int clientid = clientsockets.Count;
            Socket clinetsocket = clientsockets[clientid-1];

                ServerInfoEventArgs args = new ServerInfoEventArgs();
                args.consoleinfo = "Connection accepted from " + clinetsocket.RemoteEndPoint + "\n";
                OnNeedLog(args);

                ServerClient client = new ServerClient();
                client.id = clientid;
                client.port = ((IPEndPoint)clinetsocket.RemoteEndPoint).Port.ToString();
                client.ip = ((IPEndPoint)clinetsocket.RemoteEndPoint).Address.ToString();
                client.name = recieveData(clinetsocket,_inputsize);   // itt várakozik az inputra
                client.gametype = "";

                lobby.add(client);

                clinetsocket.Send(new ASCIIEncoding().GetBytes("Users in the lobby.\n" + lobby.getClientsName()));
        }
 protected virtual void OnNeedLog(ServerInfoEventArgs e)
 {
     EventHandler<ServerInfoEventArgs> handler = needlog;
     if (handler != null)
     {
         handler(this, e);
     }
 }
        public void stratserver(String _ip, Int32 _port)
        {
            try
            {
                serverthread = new Thread(() =>
                {
                    ipAddress = IPAddress.Parse(_ip);
                    tcpListener = new TcpListener(ipAddress, _port);
                    tcpListener.Start();

                    ServerInfoEventArgs args = new ServerInfoEventArgs();
                    args.consoleinfo = "The server is running at port " + _port + " ...\n";
                    OnNeedLog(args);
                    args.consoleinfo = "The local End point is: " + tcpListener.LocalEndpoint + "\n";
                    OnNeedLog(args);
                    args.consoleinfo = "Waiting for a connection.....\n";
                    OnNeedLog(args);

                    clientsockets = new List<Socket>();
                    gamelist = new List<Game>();
                    lobby = new Lobby();

                    while (true)
                    {
                        if (tcpListener.Pending())
                        {
                            clientsockets.Add(tcpListener.AcceptSocket());
                            acceptConnection(100);
                        }
                    }

                });

                serverthread.Start();

            }
            catch (Exception e)
            {
                Console.WriteLine("Error..... " + e.Message);
            }
        }
        public void stopserver()
        {
            if (tcpListener != null && serverthread != null)
            {
                foreach(Socket socket in clientsockets)
                {
                   socket.Close();
                }
                tcpListener.Stop();

                serverthread.Abort();
            }

            ServerInfoEventArgs args = new ServerInfoEventArgs();
            args.consoleinfo = "Server Closed Successfully!\n";
            OnNeedLog(args);
        }
        public void stratServer(String _ip, Int32 _port)
        {
            try
            {
                serverThread = new Thread(() =>
                {
                    ipAddress = IPAddress.Parse(_ip);
                    tcpListener = new TcpListener(ipAddress, _port);
                    tcpListener.Start();

                    ServerInfoEventArgs args = new ServerInfoEventArgs();
                    args.consoleinfo = "The server is running at port " + _port + " ...\n";
                    OnNeedLog(args);
                    args.consoleinfo = "The local End point is: " + tcpListener.LocalEndpoint + "\n";
                    OnNeedLog(args);
                    args.consoleinfo = "Waiting for a connection.....\n";
                    OnNeedLog(args);

                    while (true)
                    {
                        if (tcpListener.Pending())
                        {
                            Console.WriteLine("Adding ID: " + Convert.ToString(idCounter));
                            Socket socket = tcpListener.AcceptSocket();
                            lobby.add(new ServerClient(
                                idCounter,
                                ((IPEndPoint)socket.RemoteEndPoint).Port.ToString(),
                                ((IPEndPoint)socket.RemoteEndPoint).Address.ToString(),
                                recieveData(socket, 100),
                                recieveData(socket, 100),
                                socket,
                                false
                            ));

                            idCounter++;
                            string sendString = ((IPEndPoint)socket.RemoteEndPoint).Address.ToString();
                            sendString += ";" + ((IPEndPoint)socket.RemoteEndPoint).Port.ToString();

                            socket.Send(new ASCIIEncoding().GetBytes(sendString));
                        }

                        List<ServerClient>clList = lobby.getClientlist();

                        foreach (ServerClient client in clList)
                        {
                            if (!client.startedrecive)
                            {
                                client.startedrecive = true;

                                Thread recieve = new Thread(() =>
                                {
                                    while (true)
                                    {
                                        recieveDone.Reset();
                                        StateObject state = new StateObject();
                                        state.workSocket = client.clientsocket;

                                        client.clientsocket.BeginReceive(state.buffer, 0, StateObject.BufferSize,
                                                                         0, new AsyncCallback(receiveCompleted), state);
                                        recieveDone.WaitOne();
                                    }

                                });

                                recieve.Start();
                            }

                        }

                    }

                });

                serverThread.Start();

            }
            catch (Exception e)
            {
                Console.WriteLine("Error..... " + e.Message);
            }
        }