Main Page Modules Namespaces C++ Classes Compound List File List Index
TNL: tnlRPC.h File Reference

# tnlRPC.h File Reference

`#include "tnlMethodDispatch.h"`
`#include "tnlNetEvent.h"`

## Namespaces

namespace | TNL

## Data Structures

class | TNL::RPCEvent
| Base class for RPC events. More...

## Defines

#define | TNL_IMPLEMENT_RPC(className, name, args, argNames, groupMask, guaranteeType, eventDirection, rpcVersion)
| Macro used to declare the implementation of an RPC method on an EventConnection subclass.
#define | TNL_DECLARE_RPC(name, args) void name args; void name##_test args; virtual TNL::NetEvent * name##_construct args; virtual void name##_remote args
| Declares an RPC method within a class declaration. Creates two method prototypes - one for the host side of the RPC call, and one for the receiver, which performs the actual method.
#define | TNL_DECLARE_RPC_OVERRIDE(name, args) void name##_remote args
| Declares an override to an RPC method declared in a parent class.
#define | TNL_IMPLEMENT_RPC_OVERRIDE(className, name, args) void className::name##_remote args
| Macro used to declare the body of an overridden RPC method.
#define | TNL_RPC_CONSTRUCT_NETEVENT(object, rpcMethod, args) (object)->rpcMethod##_construct args
| Constructs a NetEvent that will represent the specified RPC invocation.

## Enumerations

enum | TNL::RPCDirection { TNL::RPCDirAny = NetEvent::DirAny, TNL::RPCDirServerToClient = NetEvent::DirServerToClient, TNL::RPCDirClientToServer = NetEvent::DirClientToServer }
| Enumeration for valid directions that RPC messages can travel. More...
enum | TNL::RPCGuaranteeType { TNL::RPCGuaranteedOrdered = NetEvent::GuaranteedOrdered, TNL::RPCGuaranteed = NetEvent::Guaranteed, TNL::RPCUnguaranteed = NetEvent::Unguaranteed }
| Type of data guarantee this RPC should use. More...

## Define Documentation

#define TNL_IMPLEMENT_RPC | ( | className,
|  | name,
|  | args,
|  | argNames,
|  | groupMask,
|  | guaranteeType,
|  | eventDirection,
|  | rpcVersion |  | ) |

Value:

    class RPC_##className##_##name : public TNL::RPCEvent { \
    public: \
       TNL::FunctorDecl<void (className::*) args > mFunctorDecl;\
       RPC_##className##_##name() : TNL::RPCEvent(guaranteeType, eventDirection), mFunctorDecl(&className::name##_remote) { mFunctor = &mFunctorDecl; } \
       TNL_DECLARE_CLASS( RPC_##className##_##name ); \
       bool checkClassType(TNL::Object *theObject) { return dynamic_cast<className *>(theObject) != NULL; } }; \
       TNL_IMPLEMENT_NETEVENT( RPC_##className##_##name, groupMask, rpcVersion ); \
       void className::name args { RPC_##className##_##name *theEvent = new RPC_##className##_##name; theEvent->mFunctorDecl.set argNames ; postNetEvent(theEvent); } \
       TNL::NetEvent * className::name##_construct args { RPC_##className##_##name *theEvent = new RPC_##className##_##name; theEvent->mFunctorDecl.set argNames ; return theEvent; } \
       void className::name##_test args { RPC_##className##_##name *theEvent = new RPC_##className##_##name; theEvent->mFunctorDecl.set argNames ; TNL::PacketStream ps; theEvent->pack(this, &ps); ps.setBytePosition(0); theEvent->unpack(this, &ps); theEvent->process(this); } \
       void className::name##_remote args

Macro used to declare the implementation of an RPC method on an EventConnection subclass.

The macro should be used in place of a member function parameter declaration, with the body code (to be executed on the remote side of the RPC) immediately following the TNL_IMPLEMENT_RPC macro call.

#define TNL_DECLARE_RPC | ( | name,
|  | args |  | ) | void name args; void name##_test args; virtual TNL::NetEvent * name##_construct args; virtual void name##_remote args

Declares an RPC method within a class declaration. Creates two method prototypes - one for the host side of the RPC call, and one for the receiver, which performs the actual method.

#define TNL_DECLARE_RPC_OVERRIDE | ( | name,
|  | args |  | ) | void name##_remote args

Declares an override to an RPC method declared in a parent class.

#define TNL_IMPLEMENT_RPC_OVERRIDE | ( | className,
|  | name,
|  | args |  | ) | void className::name##_remote args

Macro used to declare the body of an overridden RPC method.

#define TNL_RPC_CONSTRUCT_NETEVENT | ( | object,
|  | rpcMethod,
|  | args |  | ) | (object)->rpcMethod##_construct args

Constructs a NetEvent that will represent the specified RPC invocation.

This macro is used to construct a single RPC that can then be posted to multiple connections, instead of allocating an RPCEvent for each connection.