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..."); }
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(); }