From 701aea78597d6cb66bfa21f4c242c9da4a1e7cea Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sun, 10 Jan 2016 10:57:37 +0100 Subject: [PATCH] modernized network_manager (nw) --- src/emu/machine.cpp | 2 +- src/emu/machine.h | 3 +++ src/emu/network.cpp | 56 +++++++++++++++++++++++++-------------------- src/emu/network.h | 18 ++++++++++++++- 4 files changed, 52 insertions(+), 27 deletions(-) diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index c2f0a2c85e3..1bb426a924e 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -269,7 +269,7 @@ void running_machine::start() image_init(*this); m_tilemap = std::make_unique(*this); crosshair_init(*this); - network_init(*this); + m_network = std::make_unique(*this); // initialize the debugger if ((debug_flags & DEBUG_FLAG_ENABLED) != 0) diff --git a/src/emu/machine.h b/src/emu/machine.h index 271eaa92e13..279c4e16689 100644 --- a/src/emu/machine.h +++ b/src/emu/machine.h @@ -85,6 +85,7 @@ class video_manager; class ui_manager; class tilemap_manager; class debug_view_manager; +class network_manager; class osd_interface; struct romload_private; @@ -163,6 +164,7 @@ public: input_manager &input() const { assert(m_input != nullptr); return *m_input; } sound_manager &sound() const { assert(m_sound != nullptr); return *m_sound; } video_manager &video() const { assert(m_video != nullptr); return *m_video; } + network_manager &network() const { assert(m_network != nullptr); return *m_network; } ui_manager &ui() const { assert(m_ui != nullptr); return *m_ui; } tilemap_manager &tilemap() const { assert(m_tilemap != nullptr); return *m_tilemap; } debug_view_manager &debug_view() const { assert(m_debug_view != nullptr); return *m_debug_view; } @@ -279,6 +281,7 @@ private: std::unique_ptr m_ui; // internal data from ui.c std::unique_ptr m_tilemap; // internal data from tilemap.c std::unique_ptr m_debug_view; // internal data from debugvw.c + std::unique_ptr m_network; // internal data from network.c // system state machine_phase m_current_phase; // current execution phase diff --git a/src/emu/network.cpp b/src/emu/network.cpp index 5bcd8173618..8d48690e5b4 100644 --- a/src/emu/network.cpp +++ b/src/emu/network.cpp @@ -13,11 +13,26 @@ #include "config.h" #include "xmlfile.h" -/*************************************************************************** - INITIALIZATION HELPERS -***************************************************************************/ +//************************************************************************** +// NETWORK MANAGER +//************************************************************************** -static void network_load(running_machine &machine, int config_type, xml_data_node *parentnode) +//------------------------------------------------- +// network_manager - constructor +//------------------------------------------------- + +network_manager::network_manager(running_machine &machine) + : m_machine(machine) +{ + config_register(machine, "network", config_saveload_delegate(FUNC(network_manager::config_load), this), config_saveload_delegate(FUNC(network_manager::config_save), this)); +} + +//------------------------------------------------- +// config_load - read and apply data from the +// configuration file +//------------------------------------------------- + +void network_manager::config_load(int config_type, xml_data_node *parentnode) { xml_data_node *node; if ((config_type == CONFIG_TYPE_GAME) && (parentnode != nullptr)) @@ -28,18 +43,18 @@ static void network_load(running_machine &machine, int config_type, xml_data_nod if ((tag != nullptr) && (tag[0] != '\0')) { - network_interface_iterator iter(machine.root_device()); + network_interface_iterator iter(machine().root_device()); for (device_network_interface *network = iter.first(); network != nullptr; network = iter.next()) { if (!strcmp(tag, network->device().tag())) { int interface = xml_get_attribute_int(node, "interface", 0); network->set_interface(interface); const char *mac_addr = xml_get_attribute_string(node, "mac", nullptr); - if (mac_addr != nullptr && strlen(mac_addr)==17) { + if (mac_addr != nullptr && strlen(mac_addr) == 17) { char mac[7]; unsigned int mac_num[6]; - sscanf (mac_addr,"%02x:%02x:%02x:%02x:%02x:%02x",&mac_num[0],&mac_num[1],&mac_num[2],&mac_num[3],&mac_num[4],&mac_num[5]); - for (int i=0;i<6;i++) mac[i]=mac_num[i]; + sscanf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x", &mac_num[0], &mac_num[1], &mac_num[2], &mac_num[3], &mac_num[4], &mac_num[5]); + for (int i = 0; i<6; i++) mac[i] = mac_num[i]; network->set_mac(mac); } @@ -49,15 +64,19 @@ static void network_load(running_machine &machine, int config_type, xml_data_nod } } } +//------------------------------------------------- +// config_save - save data to the configuration +// file +//------------------------------------------------- -static void network_save(running_machine &machine, int config_type, xml_data_node *parentnode) +void network_manager::config_save(int config_type, xml_data_node *parentnode) { xml_data_node *node; /* only care about game-specific data */ if (config_type == CONFIG_TYPE_GAME) { - network_interface_iterator iter(machine.root_device()); + network_interface_iterator iter(machine().root_device()); for (device_network_interface *network = iter.first(); network != nullptr; network = iter.next()) { node = xml_add_child(parentnode, "device", nullptr); @@ -66,23 +85,10 @@ static void network_save(running_machine &machine, int config_type, xml_data_nod xml_set_attribute(node, "tag", network->device().tag()); xml_set_attribute_int(node, "interface", network->get_interface()); const char *mac = network->get_mac(); - char mac_addr[6*3]; - sprintf(mac_addr,"%02x:%02x:%02x:%02x:%02x:%02x",(UINT8)mac[0],(UINT8)mac[1],(UINT8)mac[2],(UINT8)mac[3],(UINT8)mac[4],(UINT8)mac[5]); + char mac_addr[6 * 3]; + sprintf(mac_addr, "%02x:%02x:%02x:%02x:%02x:%02x", (UINT8)mac[0], (UINT8)mac[1], (UINT8)mac[2], (UINT8)mac[3], (UINT8)mac[4], (UINT8)mac[5]); xml_set_attribute(node, "mac", mac_addr); } } } } - -/*************************************************************************** - INITIALIZATION -***************************************************************************/ - -/*------------------------------------------------- - network_init - start up the network system --------------------------------------------------*/ - -void network_init(running_machine &machine) -{ - config_register(machine, "network", config_saveload_delegate(FUNC(network_load), &machine), config_saveload_delegate(FUNC(network_save), &machine)); -} diff --git a/src/emu/network.h b/src/emu/network.h index fe1fec01016..ab082922129 100644 --- a/src/emu/network.h +++ b/src/emu/network.h @@ -12,6 +12,22 @@ #ifndef __NETWORK_H__ #define __NETWORK_H__ -void network_init(running_machine &machine); +// ======================> network_manager + +class network_manager +{ +public: + // construction/destruction + network_manager(running_machine &machine); + + // getters + running_machine &machine() const { return m_machine; } +private: + void config_load(int config_type, xml_data_node *parentnode); + void config_save(int config_type, xml_data_node *parentnode); + + // internal state + running_machine & m_machine; // reference to our machine +}; #endif /* __NETWORK_H__ */