Component refactor

On January 20th, 2012, Hari, Sean, Brad, Cyrus, Eric, and Hank had a telecon discussing refactoring the components. The driving goal is to create a VisIt web portal, but we also kept in mind additional applications, including scalable rendering for large tiled displays.

We discussed three new features

  • MDServer functionality added to ViewerProxy
  • Dynamic addition of clients
  • Forwarding render objects to interested clients

Specific comments for moving MDServerProxy functionality into ViewerProxy:

  • Make a central interface so that code is maintained and updated properly (MDServerState class)
  • Ensure new gui MDServer functions properly in new environment
class MDServerState
{
    ChangeDirectoryRPC *changeDirectoryRPC;
};

class MDServerMethods
{
public:
   void ChangeDirectory(const std::string &dir)
   {
       state->changeDirectoryRPC->operator()(dir);
   }

   FileList GetFileList(/*args*/);
   // and so on
private:
   MDServerState *state;
};

class MDServerProxy
{
public:
    MDServerMethods *GetMDServerMethods() { return methods; }
private:
    MDServerMethods *methods;
};

class ViewerProxy
{
public:
    ViewerMethods   *GetViewerMethods();
    MDServerMethods *GetMDServerMethods(const std::string &host = std::string("localhost"))
    {
        // Tell the viewer the name of the host to which subsequent
        // mdserver requests will be sent   
        GetViewerMethods()->RouteMDServerRequests(host);
        return mdsmethods;
    }
private:
    MDServerMethods *mdsmethods;
};

void client()
{
    GetViewerProxy()->GetMDServerMethods("euclid.nersc.gov")->ChangeDirectory("~");
}

Specific comments for add new clients:

  • knowledge of all other clients connected to central Viewer
  • Ability to share views between clients
  • Create intuitive interface so that clients can add/remove others, have better password protection, and other tools useful for collaborating

Specific comments for Forwarding render agents:

  • Add Client communication with engine (Viewer possibly drives coordination). Also, think about enabling scalable rendering mechanism.
  • For tiled and VR displays provide ability for clients to coordinate and set proper View Matrix (It is likely that clients will be able coordinate to do this externally without support in VisIt)

Additional Notes:

  • Roll out changes incrementally
  • Copy git branch to NERSC for everyone to play with

Immediate Todo items:

  • Add rendering capability to Java client for addition into web portal
  • refactor code to move render window so that it is accessible by any C++ module

Future Todo items:

  • Modify ViewerPlugin to send out std::string GetXML() functionality (Will make it easier to construct new clients)
  • Option to create standalone client (Not discussed during call: but I think for cases that if the client can connect to a remote Viewer this would be very useful)

Media:New_features_in_VisIt.pdf