Architecture overview:

       /----------[PluginImpl]----{shared_ptr or temporary}----\       [g_background_tasks]
       |              |                                        |                 |
       V              |                                        |                 |
[UI/Settings]         |                                        |            {shared_ptr}
                      |                                        |                 |
                 {shared_ptr}                                  V                 V
                      |                                  [Operations:OpConnect,OpXfer etc]----\
                      |                                                    |                  |
                      |                                                    |                  |
                      V                                                    |                  |
         [IHost:HostRemote,HostLocal] <---{dedicated thread, shared_ptr}---/   [UI/Activities: Confirmations, Errors, Progress]
                 /                 \
     {IPC to broker process}       |
              |                    V
              V                 [Local filesystem]
      [HostRemoteBroker]
              |
        {aggregation}
              |
              V
      [IProtocol:ProtocolSFTP,ProtocolFile]

To add additional protocol:
+ Write IProtocol implementation and function that instantiates it: see Protocol/ProtocolSFTP.cpp as example
+ Write protocol-specific options configuration UI: see UI/Settings/ConfigureProtocolSFTP.cpp as example
+ Define protocol name, broker name and other protocol properties in s_protocols array in Protocol/Protocol.cpp
* Dont forget to add new protocol broker related-files into NetRocks/CMakeLists.txt
* Keep in mind that protocol implementation hosted in separate process, so it cannot interchange any data via global variables etc
