Files
ThirdParty-6/ParaView-5.0.1/ParaViewCore/ClientServerStream/Testing/Cxx/TestSimple.cxx

176 lines
5.1 KiB
C++

/*=========================================================================
Program: ParaView
Module: TestSimple.cxx
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.
=========================================================================*/
#include "vtkClientServerInterpreter.h"
#include "vtkClientServerStream.h"
class Server
{
public:
Server();
~Server()
{
ClientServerInterpreter->Delete();
}
void GetResultMessageData(const unsigned char**, size_t*);
void ProcessMessage(const unsigned char*, size_t);
void PrintObjects();
private:
vtkClientServerInterpreter* ClientServerInterpreter;
vtkClientServerStream ServerStream;
};
class ClientManager
{
public:
void SetServer(Server* s)
{
this->server = s;
}
const vtkClientServerStream* GetResultMessage();
vtkClientServerID GetUniqueID()
{
static vtkClientServerID id(3);
++id.ID;
return id;
}
void RunTests();
vtkClientServerStream stream;
Server* server;
};
// ClientServer wrapper initialization functions.
extern "C" void vtkCommonCS_Initialize(vtkClientServerInterpreter*);
extern "C" void vtkFilteringCS_Initialize(vtkClientServerInterpreter*);
extern "C" void vtkImagingCS_Initialize(vtkClientServerInterpreter*);
extern "C" void vtkGraphicsCS_Initialize(vtkClientServerInterpreter*);
extern "C" void vtkIOCS_Initialize(vtkClientServerInterpreter*);
extern "C" void vtkRenderingCS_Initialize(vtkClientServerInterpreter*);
Server::Server()
{
this->ClientServerInterpreter = vtkClientServerInterpreter::New();
vtkCommonCS_Initialize(this->ClientServerInterpreter);
vtkFilteringCS_Initialize(this->ClientServerInterpreter);
vtkImagingCS_Initialize(this->ClientServerInterpreter);
vtkGraphicsCS_Initialize(this->ClientServerInterpreter);
vtkIOCS_Initialize(this->ClientServerInterpreter);
vtkRenderingCS_Initialize(this->ClientServerInterpreter);
}
void Server::GetResultMessageData(const unsigned char** data, size_t* len)
{
const vtkClientServerStream& ames = this->ClientServerInterpreter->GetLastResult();
if(!(ames.GetNumberOfMessages() > 0 && ames.GetData(data, len)))
{
*data = 0;
*len = 0;
}
}
void Server::ProcessMessage(const unsigned char* msg, size_t length)
{
if(!this->ClientServerInterpreter->ProcessStream(msg, length))
{
cerr << "error in process message\n";
}
}
void Server::PrintObjects()
{
}
const vtkClientServerStream* ClientManager::GetResultMessage()
{
const unsigned char* data;
size_t len;
// simulate getting a message over a socket from the server
server->GetResultMessageData(&data, &len);
// now create a message on the client
vtkClientServerStream* result = new vtkClientServerStream;
result->SetData(data, len);
return result;
}
void ClientManager::RunTests()
{
vtkClientServerID instance_id = this->GetUniqueID();
stream << vtkClientServerStream::New << "vtkObject" << instance_id << vtkClientServerStream::End;
stream << vtkClientServerStream::Invoke << instance_id << "DebugOn" << vtkClientServerStream::End;
const unsigned char* data;
size_t len;
stream.GetData(&data, &len);
server->ProcessMessage(data, len);
stream.Reset();
stream << vtkClientServerStream::Invoke << instance_id << "GetClassName" << vtkClientServerStream::End;
stream.GetData(&data, &len);
server->ProcessMessage(data, len);
const char* name;
if(this->GetResultMessage()->GetArgument(0, 0, &name))
{
cerr << name << "\n";
}
stream.Reset();
stream << vtkClientServerStream::Invoke << instance_id << "SetReferenceCount" << 10 << vtkClientServerStream::End;
stream.GetData(&data, &len);
server->ProcessMessage(data, len);
stream.Reset();
stream << vtkClientServerStream::Invoke << instance_id << "GetReferenceCount" << vtkClientServerStream::End;
stream.GetData(&data, &len);
server->ProcessMessage(data, len);
int refcount;
if(this->GetResultMessage()->GetArgument(0, 0, &refcount))
{
cerr << refcount << "\n";
}
stream.Reset();
stream << vtkClientServerStream::Invoke << instance_id << "SetReferenceCount" << 1 << vtkClientServerStream::End;
stream << vtkClientServerStream::Delete << instance_id << vtkClientServerStream::End;
stream.GetData(&data, &len);
server->ProcessMessage(data, len);
}
int TestSimple(int, char**)
{
Server server;
ClientManager cmgr;
cmgr.SetServer(&server);
cmgr.RunTests();
return 0;
}
// new names
// vtkClientServerInterpreter - vtkClientServerInterpreter - process data, len
// // vtkClientServerMessage - vtkClientServerMessage -
// // vtkClientServerStream - vtkClientServerStream - has the unique id stuff and GetData(data, len)
// vtkPVClientServerModule - should have vtkClientServerStream
// If(this->ClientMode)
// {
// initialize
// add method FlushMessages()
// CallRMI
// }
// else
// {
// vtkClientServerInterpreter
// add RMI