1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
//
// Copyright (c) ZeroC, Inc. All rights reserved.
//
#include <Ice/Ice.h>
#include <BlobjectI.h>
#include <Test.h>
#include <TestHelper.h>
using namespace std;
bool
invokeInternal(Ice::InputStream& in, vector<Ice::Byte>& outEncaps, const Ice::Current& current)
{
Ice::CommunicatorPtr communicator = current.adapter->getCommunicator();
Ice::OutputStream out(communicator);
out.startEncapsulation();
if(current.operation == "opOneway")
{
return true;
}
else if(current.operation == "opString")
{
string s;
in.startEncapsulation();
in.read(s);
in.endEncapsulation();
out.write(s);
out.write(s);
out.endEncapsulation();
out.finished(outEncaps);
return true;
}
else if(current.operation == "opException")
{
if(current.ctx.find("raise") != current.ctx.end())
{
throw Test::MyException();
}
Test::MyException ex;
out.writeException(ex);
out.endEncapsulation();
out.finished(outEncaps);
return false;
}
else if(current.operation == "shutdown")
{
out.endEncapsulation();
out.finished(outEncaps);
communicator->shutdown();
return true;
}
else if(current.operation == "ice_isA")
{
string s;
in.startEncapsulation();
in.read(s);
in.endEncapsulation();
if(s == "::Test::MyClass")
{
out.write(true);
}
else
{
out.write(false);
}
out.endEncapsulation();
out.finished(outEncaps);
return true;
}
else
{
Ice::OperationNotExistException ex(__FILE__, __LINE__);
ex.id = current.id;
ex.facet = current.facet;
ex.operation = current.operation;
throw ex;
}
}
bool
BlobjectI::ice_invoke(ICE_IN(vector<Ice::Byte>) inEncaps, vector<Ice::Byte>& outEncaps, const Ice::Current& current)
{
Ice::InputStream in(current.adapter->getCommunicator(), current.encoding, inEncaps);
return invokeInternal(in, outEncaps, current);
}
bool
BlobjectArrayI::ice_invoke(ICE_IN(pair<const Ice::Byte*, const Ice::Byte*>) inEncaps, vector<Ice::Byte>& outEncaps,
const Ice::Current& current)
{
Ice::InputStream in(current.adapter->getCommunicator(), current.encoding, inEncaps);
return invokeInternal(in, outEncaps, current);
}
#ifdef ICE_CPP11_MAPPING
void
BlobjectAsyncI::ice_invokeAsync(vector<Ice::Byte> inEncaps,
function<void(bool, const vector<Ice::Byte>&)> response,
function<void(exception_ptr)>,
const Ice::Current& current)
{
Ice::InputStream in(current.adapter->getCommunicator(), inEncaps);
vector<Ice::Byte> outEncaps;
bool ok = invokeInternal(in, outEncaps, current);
response(ok, outEncaps);
}
void
BlobjectArrayAsyncI::ice_invokeAsync(pair<const Ice::Byte*, const Ice::Byte*> inEncaps,
function<void(bool, const pair<const Ice::Byte*, const Ice::Byte*>&)> response,
function<void(exception_ptr)>,
const Ice::Current& current)
{
Ice::InputStream in(current.adapter->getCommunicator(), inEncaps);
vector<Ice::Byte> outEncaps;
bool ok = invokeInternal(in, outEncaps, current);
#if (defined(_MSC_VER) && (_MSC_VER >= 1600))
pair<const Ice::Byte*, const Ice::Byte*> outPair(static_cast<const Ice::Byte*>(nullptr), static_cast<const Ice::Byte*>(nullptr));
#else
pair<const Ice::Byte*, const Ice::Byte*> outPair(0, 0);
#endif
if(outEncaps.size() != 0)
{
outPair.first = &outEncaps[0];
outPair.second = &outEncaps[0] + outEncaps.size();
}
response(ok, outPair);
}
#else
void
BlobjectAsyncI::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& cb, const vector<Ice::Byte>& inEncaps,
const Ice::Current& current)
{
Ice::InputStream in(current.adapter->getCommunicator(), current.encoding, inEncaps);
vector<Ice::Byte> outEncaps;
bool ok = invokeInternal(in, outEncaps, current);
cb->ice_response(ok, outEncaps);
}
void
BlobjectArrayAsyncI::ice_invoke_async(const Ice::AMD_Object_ice_invokePtr& cb,
const pair<const Ice::Byte*, const Ice::Byte*>& inEncaps,
const Ice::Current& current)
{
Ice::InputStream in(current.adapter->getCommunicator(), current.encoding, inEncaps);
vector<Ice::Byte> outEncaps;
bool ok = invokeInternal(in, outEncaps, current);
#if (defined(_MSC_VER) && (_MSC_VER >= 1600))
pair<const Ice::Byte*, const Ice::Byte*> outPair(static_cast<const Ice::Byte*>(nullptr), static_cast<const Ice::Byte*>(nullptr));
#else
pair<const Ice::Byte*, const Ice::Byte*> outPair(0, 0);
#endif
if(outEncaps.size() != 0)
{
outPair.first = &outEncaps[0];
outPair.second = &outEncaps[0] + outEncaps.size();
}
cb->ice_response(ok, outPair);
}
#endif
|