diff options
Diffstat (limited to 'daemon/src')
| -rw-r--r-- | daemon/src/config.cpp | 31 | ||||
| -rw-r--r-- | daemon/src/connection_manager.cpp | 11 | ||||
| -rw-r--r-- | daemon/src/connection_manager.h | 4 | 
3 files changed, 38 insertions, 8 deletions
| diff --git a/daemon/src/config.cpp b/daemon/src/config.cpp index b88fd0f..b711d52 100644 --- a/daemon/src/config.cpp +++ b/daemon/src/config.cpp @@ -87,13 +87,24 @@ add_to_routes(Device_Id const & from_device, Route_Table & rt, toml::table & rou              {                  for (auto&& [name, mt] : string2type)                  { -                    rt[from_device][mt].push_back(cm.get_sender(to_device)); +                    if (auto sender = cm.get_sender(to_device)) +                    { +                        rt[from_device][mt].push_back(sender.value()); +                    }                  }              }              else              { -                Message_Type mt = string2type.at(type.as_string()->get()); -                rt[from_device][mt].push_back(cm.get_sender(to_device)); +                if (!string2type.contains(type.as_string()->get())) +                { +                    continue; +                } + +                if (auto sender = cm.get_sender(to_device)) +                { +                    Message_Type const mt = string2type.at(type.as_string()->get()); +                    rt[from_device][mt].push_back(sender.value()); +                }              }          }      } @@ -113,6 +124,10 @@ add_type_routes(Device_Map const & device_map, Device_Id const & from_device, Ro          }          for (auto & device : *devices)          { +            if (!string2type.contains(type)) +            { +                continue; +            }              Message_Type mt = string2type.at(type);              std::string to_device = device.as_string()->get();              if (to_device == "all") @@ -120,12 +135,18 @@ add_type_routes(Device_Map const & device_map, Device_Id const & from_device, Ro                  for (auto&& [name, id] : device_map)                  {                      if (id == from_device) continue; -                    rt[from_device][mt].push_back(cm.get_sender(id)); +                    if (auto sender = cm.get_sender(id)) +                    { +                        rt[from_device][mt].push_back(sender.value()); +                    }                  }              }              else              { -                rt[from_device][mt].push_back(cm.get_sender(to_device)); +                if (auto sender = cm.get_sender(to_device)) +                { +                    rt[from_device][mt].push_back(sender.value()); +                }              }          }      } diff --git a/daemon/src/connection_manager.cpp b/daemon/src/connection_manager.cpp index 7467e4e..c3d260e 100644 --- a/daemon/src/connection_manager.cpp +++ b/daemon/src/connection_manager.cpp @@ -43,10 +43,17 @@ Connection_Manager::Connection_Manager(Device_Map const & device_map, Submitter  Connection_Manager::~Connection_Manager() = default; -Sender & +std::optional<std::reference_wrapper<Sender>>  Connection_Manager::get_sender(Device_Id const & device) const  { -    return *m_connections.at(device); +    if (m_connections.contains(device)) +    { +        return *m_connections.at(device); +    } +    else +    { +        return std::nullopt; +    }  }  void diff --git a/daemon/src/connection_manager.h b/daemon/src/connection_manager.h index d8b0e90..2711d34 100644 --- a/daemon/src/connection_manager.h +++ b/daemon/src/connection_manager.h @@ -8,6 +8,8 @@  #include <memory>  #include <map>  #include <thread> +#include <optional> +#include <functional>  namespace midi_router  { @@ -21,7 +23,7 @@ public:      ~Connection_Manager(); -    Sender & +    std::optional<std::reference_wrapper<Sender>>      get_sender(Device_Id const & device) const;  private: | 
