// $Revision: 1.4 $ // Copyright (C) 1994-1995 Taligent, Inc. All rights reserved. #ifndef TaligentSamples_ADDITIONCALLER #include "AdditionCaller.h" #endif #ifndef TaligentSamples_ADDITIONDISPATCHER #include "AdditionDispatcher.h" #endif #ifndef Taligent_MESSAGESTREAMSTRANSPORT #include #endif #ifndef IOSTREAMH #include // for cout #endif //---- TAdditionCaller --------------------------------------------------------- MRemoteCallerDefinitionsMacro(TAdditionCaller); TaligentTypeExtensionMacro(TAdditionCaller) TAdditionCaller::TAdditionCaller() : MRemoteCaller(), MAdditionProtocol(), fServiceReference(NIL), fTransport(NIL) { MRemoteCallerEnable(); } TAdditionCaller::TAdditionCaller(const TServiceReference& serviceReference) : MRemoteCaller(), MAdditionProtocol(), fServiceReference(NIL), fTransport(NIL) { MRemoteCallerEnable(); fServiceReference = ::Copy(serviceReference); fTransport = new TMessageStreamsTransport(new TRequestSenderStream(*fServiceReference)); SetTransport(fTransport); } TAdditionCaller::TAdditionCaller(const TAdditionCaller& source) : MRemoteCaller(), fServiceReference(NIL), fTransport(NIL) { MRemoteCallerEnable(); fServiceReference = ::CopyPointer(source.fServiceReference); fTransport = new TMessageStreamsTransport(new TRequestSenderStream(*fServiceReference)); SetTransport(fTransport); } TAdditionCaller::~TAdditionCaller() { delete fServiceReference; delete fTransport; } TAdditionCaller& TAdditionCaller::operator=(const TAdditionCaller& source) { // Can't be done because you can't change the transport you are using. // This member function has been privatized due to this. return *this; } TStream& TAdditionCaller::operator>>=(TStream& toStream) const { ::WriteVersion(toStream, kOriginalVersion); ::Flatten(fServiceReference, toStream); return toStream; } TStream& TAdditionCaller::operator<<=(TStream& fromStream) { ::ReadVersion(fromStream, kOriginalVersion, kOriginalVersion); delete fServiceReference; ::Resurrect(fServiceReference, fromStream); fTransport = new TMessageStreamsTransport(new TRequestSenderStream(*fServiceReference)); SetTransport(fTransport); return fromStream; } long TAdditionCaller::Add(long num1, long num2) { long result = 0; try { TStream& argumentStream = *BeginRequest(TAdditionDispatcher::kAdd); num1 >>= argumentStream; num2 >>= argumentStream; TStream& resultStream = *SendRequest(); result <<= resultStream; EndRequest(); } catch (TRemoteCallException& exception) { cout << endl << "*** Remote call failed. ***" << endl; } catch (TMathException& exception) { cout << endl << "*** Received Math Exception ***" << endl; throw; } catch (TStandardException& exception) { cout << endl << "*** Encountered an error while making remote call. ***" << endl; } catch (...) { cout << endl << "*** Encountered a completely unknown error while making remote call. ***" << endl; } return result; } void TAdditionCaller::AddOne(long& num1) { try { TStream& argumentStream = *BeginRequest(TAdditionDispatcher::kAddOne); num1 >>= argumentStream; TStream& resultStream = *SendRequest(); num1 <<= resultStream; EndRequest(); } catch (TRemoteCallException& exception) { cout << endl << "*** Remote call failed. ***" << endl; } catch (TMathException& exception) { cout << endl << "*** Received math exception ***" << endl; throw; } catch (TStandardException& exception) { cout << endl << "*** Encountered an error while making remote call. ***" << endl; } catch (...) { cout << endl << "*** Encountered a completely unknown error while making remote call. ***" << endl; } }