Esempio n. 1
0
        public void run()
        {
            long ping_at = get_ms() + 5000;

            Console.TreatControlCAsInput = false;
            Console.CancelKeyPress      += new ConsoleCancelEventHandler((object sender, ConsoleCancelEventArgs args) =>
            {
                args.Cancel = true;
                exit        = true;
            });

            Console.WriteLine("Server waiting for clients... Ctrl-c to exit");

            while (!exit)
            {
                for (int i = clients.Count - 1; i >= 0; i--)
                {
                    game_client c = clients[i];
                    switch (equ8.session_manager.poll_event(c.name, ev))
                    {
                    case equ8.equ8_event_id.send_request:
                    {
                        Console.WriteLine(
                            "EQU8 Data Send Request: user: '******' size: {1}",
                            c.name, ev.get_send_event_size());
                        send_packet(c, new packet_equ8_data(
                                        ev.duplicate_send_event()));
                    }
                    break;

                    case equ8.equ8_event_id.status:
                    {
                        var action = ev.get_status_action();
                        if (!user_is_allowed_to_play(c.addr, c.name, action))
                        {
                            Console.WriteLine("Client '{0}' kicked (action: {1})",
                                              c.name, action);
                            remove_client(i);
                        }
                    }
                    break;
                    }
                }

                if (get_ms() >= ping_at)
                {
                    for (int i = clients.Count - 1; i >= 0; i--)
                    {
                        game_client c = clients[i];
                        if (!c.ping_ok)
                        {
                            Console.WriteLine("Kicking client {0} (late ping reply)", c.name);
                            remove_client(i);
                        }
                        else
                        {
                            c.ping_ok = false;
                        }
                    }
                    send_to_all(new packet_ping());
                    ping_at = get_ms() + 5000;
                }
                Tuple <IPEndPoint, packet> data = read_network();
                if (null != data)
                {
                    update_clients(data.Item1, data.Item2);
                }
            }
            Console.WriteLine("Server is exiting...");
        }
Esempio n. 2
0
        public void run()
        {
            send_to_server(new packet_connect(my_name));

            new Thread(game_thread).Start();

            while (!quit)
            {
                byte[] data = new byte [512];
                if (socket.Receive(data) <= 0)
                {
                    continue;
                }
                packet p = Packet.serialize_packet(data);
                if (packet_type.equ8_data == p.id)
                {
                    var s = ((packet_equ8_data)p);
                    equ8.client.on_data_received(s.data);
                }
                else if (packet_type.ping == p.id)
                {
                    socket.Send(Packet.serialize_packet(p));
                }
                else if (packet_type.position == p.id)
                {
                    update_position((packet_position)p);
                }
                else if (packet_type.remove_client == p.id)
                {
                    packet_remove_client remove = ((packet_remove_client)p);

                    client_pos pos;
                    if (clients.TryGetValue(remove.name, out pos))
                    {
                        remove_player_name(remove.name, pos);
                        if (my_name == remove.name)
                        {
                            equ8.client.close_session();

                            Console.SetCursorPosition(0, 0);
                            Console.WriteLine("Disconnected...");
                        }
                    }
                }

                //
                // Lastly check if EQU8 has anything to send.
                //
                switch (equ8.client.poll_event(ev))
                {
                case equ8.equ8_event_id.error:
                    print_equ8_status_code(ev.get_error_code());
                    break;

                case equ8.equ8_event_id.send_request:
                {
                    packet_equ8_data equ8 = new packet_equ8_data(
                        ev.duplicate_send_event());
                    send_to_server(equ8);
                }
                break;
                }
            }

            equ8.client.close_session();
        }