mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
251 lines
9.5 KiB
C++
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
|