Files
ThirdParty-6/ParaView-5.0.1/ParaViewCore/ServerImplementation/Core/vtkPVSessionBase.h

251 lines
9.5 KiB
C++

/*=========================================================================
Program: ParaView
Module: vtkPVSessionBase.h
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkPVSessionBase
// .SECTION Description
// Abstract class used to provide the main implementation of the ParaView
// session methods for the following classes: vtkSMSession,
// vtkSMSessionClient,
// vtkSMSessionServer
#ifndef vtkPVSessionBase_h
#define vtkPVSessionBase_h
#include "vtkPVServerImplementationCoreModule.h" //needed for exports
#include "vtkPVSession.h"
#include "vtkSMMessageMinimal.h" // needed for vtkSMMessage
class vtkClientServerStream;
class vtkCollection;
class vtkSIObject;
class vtkPVInformation;
class vtkPVServerInformation;
class vtkSIProxyDefinitionManager;
class vtkPVSessionCore;
class VTKPVSERVERIMPLEMENTATIONCORE_EXPORT vtkPVSessionBase : public vtkPVSession
{
public:
vtkTypeMacro(vtkPVSessionBase, vtkPVSession);
void PrintSelf(ostream& os, vtkIndent indent);
enum EventIds
{
RegisterRemoteObjectEvent = 1234,
UnRegisterRemoteObjectEvent = 4321,
ProcessingRemoteEnd = 2143,
ConnectionLost = 6789
};
//---------------------------------------------------------------------------
// Superclass Implementations
//---------------------------------------------------------------------------
// Description:
// Returns a ServerFlags indicate the nature of the current processes. e.g. if
// the current processes acts as a data-server and a render-server, it returns
// DATA_SERVER | RENDER_SERVER. The implementation provided is suitable for
// server processes such as pvserver, pvdataserver (both root and satellites).
virtual ServerFlags GetProcessRoles();
// Description:
// vtkPVServerInformation is an information-object that provides information
// about the server processes. These include server-side capabilities as well
// as server-side command line arguments e.g. tile-display parameters. Use
// this method to obtain the server-side information.
// Overridden to provide support for non-remote-server case. We simply read
// the local process information and return it.
virtual vtkPVServerInformation* GetServerInformation();
// Description:
// This is socket connection, if any to communicate between the data-server
// and render-server nodes. Forwarded for vtkPVSessionCore.
virtual vtkMPIMToNSocketConnection* GetMPIMToNSocketConnection();
//---------------------------------------------------------------------------
// Remote communication API. This API is used for communication in the
// CLIENT -> SERVER(s) direction.
//---------------------------------------------------------------------------
//BTX
// Description:
// Push the state message.
virtual void PushState(vtkSMMessage* msg);
// Description:
// Pull the state message.
virtual void PullState(vtkSMMessage* msg);
// Description:
// Execute a command on the given processes. Use GetLastResult() to obtain the
// last result after the command stream is evaluated. Once can set
// \c ignore_errors to true, to ignore any interpreting errors.
virtual void ExecuteStream( vtkTypeUInt32 location,
const vtkClientServerStream& stream,
bool ignore_errors = false );
// Description:
// Returns the response of the ExecuteStream() call from the location. Note if
// location refers to multiple processes, then the reply is only fetched from
// the "closest" process.
virtual const vtkClientServerStream& GetLastResult(vtkTypeUInt32 location);
//ETX
// Description:
// Gather information about an object referred by the \c globalid.
// \c location identifies the processes to gather the information from.
virtual bool GatherInformation(vtkTypeUInt32 location,
vtkPVInformation* information, vtkTypeUInt32 globalid);
//---------------------------------------------------------------------------
// Remote communication API. This API is used for communication in the
// SERVER -> CLIENT direction. Since satellite nodes cannot communicate with
// the client, these methods have no effect on the satellite nodes and must
// only the called on the root-nodes for the server processes.
// If these methods are called on a process acting as a client, then it is
// processed on that process immediately, as appropriate.
//---------------------------------------------------------------------------
//BTX
// Description:
// Sends the message to all clients.
virtual void NotifyAllClients(const vtkSMMessage*)=0;
// Description:
// Sends the message to all but the active client-session.
virtual void NotifyOtherClients(const vtkSMMessage*)=0;
//ETX
//---------------------------------------------------------------------------
// API dealing with/forwarded to vtkPVSessionCore dealing with SIObjects and
// SMObjects.
//---------------------------------------------------------------------------
// Description:
// Provides access to the session core.
vtkGetObjectMacro(SessionCore, vtkPVSessionCore);
// Description:
// Get the ProxyDefinitionManager.
vtkSIProxyDefinitionManager* GetProxyDefinitionManager();
// Description:
// Returns a vtkSIObject or subclass given its global id, if any.
vtkSIObject* GetSIObject(vtkTypeUInt32 globalid);
//BTX
// Description:
// Unregister server side object. (SIObject)
virtual void UnRegisterSIObject(vtkSMMessage* msg);
// Description:
// Register server side object. (SIObject)
virtual void RegisterSIObject(vtkSMMessage* msg);
//ETX
// Description:
// Return a vtkSMRemoteObject given its global id if any otherwise return NULL;
vtkObject* GetRemoteObject(vtkTypeUInt32 globalid);
// Description:
// Allow the user to fill its vtkCollection with all RemoteObject
// This could be usefull when you want to hold a reference to them to
// prevent any deletion across several method call.
virtual void GetAllRemoteObjects(vtkCollection* collection);
//---------------------------------------------------------------------------
// API for GlobalId management
//---------------------------------------------------------------------------
// Description:
// Provides the next available identifier. This implementation works locally.
// without any code distribution. To support the distributed architecture
// the vtkSMSessionClient overide those method to call them on the DATA_SERVER
// vtkPVSessionBase instance.
virtual vtkTypeUInt32 GetNextGlobalUniqueIdentifier();
// Description:
// Return the first Id of the requested chunk.
// 1 = ReverveNextIdChunk(10); | Reserved ids [1,2,3,4,5,6,7,8,9,10]
// 11 = ReverveNextIdChunk(10);| Reserved ids [11,12,13,14,15,16,17,18,19,20]
// b = a + 10;
virtual vtkTypeUInt32 GetNextChunkGlobalUniqueIdentifier(vtkTypeUInt32 chunkSize);
// Description:
// This propertie is used to discard ignore_synchronization proxy property
// when we load protobuf states.
// Therefore, if we load any camera state while that property is true, this
// won't affect the proxy/property state at all. It will simply remain the same.
virtual bool IsProcessingRemoteNotification();
// Description:
// Update internal session core in order to use the one used in another session
virtual void UseSessionCoreOf(vtkPVSessionBase* other);
//BTX
protected:
vtkPVSessionBase();
vtkPVSessionBase(vtkPVSessionCore* coreToUse);
~vtkPVSessionBase();
// Description:
// Method used to migrate from one Session type to another by keeping the same
// vtkPVSessionCore
vtkPVSessionCore* GetSessionCore() const;
void SetSessionCore(vtkPVSessionCore*);
// Description:
// Should be called to begin/end receiving progresses on this session.
// Overridden to relay to the server(s).
virtual void PrepareProgressInternal();
virtual void CleanupPendingProgressInternal();
friend class vtkSMRemoteObject;
friend class vtkSMSessionProxyManager;
friend class vtkSMLiveInsituLinkProxy; // Needed to get access to vtkPVCatalystSessionCore
// Description:
// Methods used to monitor if we are currently processing a server notification
// Only vtkSMSessionClient use the flag to disable ignore_synchronization
// properties from beeing updated.
virtual bool StartProcessingRemoteNotification();
virtual void StopProcessingRemoteNotification(bool previousValue);
bool ProcessingRemoteNotification;
// Description:
// Register a remote object
void RegisterRemoteObject(vtkTypeUInt32 globalid, vtkTypeUInt32 location,
vtkObject* obj);
// Description:
// Unregister a remote object
void UnRegisterRemoteObject(vtkTypeUInt32 globalid, vtkTypeUInt32 location);
vtkPVSessionCore* SessionCore;
private:
vtkPVSessionBase(const vtkPVSessionBase&); // Not implemented
void operator=(const vtkPVSessionBase&); // Not implemented
// Shared constructor method
void InitSessionBase(vtkPVSessionCore* coreToUse);
vtkPVServerInformation* LocalServerInformation;
unsigned long ActivateObserverTag;
unsigned long DesactivateObserverTag;
//ETX
};
#endif