Game Development Community

RPC on a NetObject (not an RPCConnection)

by Anthony Lovell · in Torque Game Engine · 10/20/2006 (8:28 am) · 2 replies

I am not having any luck trying to implement an RPC on a NetObject subclass. I see no examples in the TNL project that demonstrates this supposed capability, and wonder what tricks there might be?

My NetObject subclass's header declares the RPC as

TNL_DECLARE_RPC(rpcSetEnvironment, 
      (TNL::Float<16> lat, 
      TNL::Float<16> lng, 
      TNL::Int<6> maxVisHm, 
      TNL::Float<16> wavePeak, 
      TNL::Float<16> windDir, 
      TNL::Float<16> windSpeed, 
      TNL::Float<16> relHumidityAtSeaLevel,
      TNL::Float<16> tempCAtSeaLevel, 
      TNL::Float<16> airPressureAtSeaLevel)
);

My CPP file has this implementation:

TNL_IMPLEMENT_RPC(MyNetObject, rpcSetEnvironment, (
                  TNL::Float<16> lat, 
                  TNL::Float<16> lng, 
                  TNL::Int<9> maxVisHm,                   
                  TNL::Float<16> wavePeak, 
                  TNL::Float<16> windDir, 
                  TNL::Float<16> windSpeed, 
                  TNL::Float<16> relHumidityAtSeaLevel,
                  TNL::Float<16> tempCAtSeaLevel, 
                  TNL::Float<16> airPressureAtSeaLevel
                  ), 
                  (
                  lat, 
                  lng, 
                  maxVisHm,                   
                  wavePeak, 
                  windDir, 
                  windSpeed, 
                  relHumidityAtSeaLevel,
                  tempCAtSeaLevel, 
                  airPressureAtSeaLevel
                  ),
                  (TNL::NetClassGroupPlayerShipMask | TNL::NetClassGroupShipWorldMask),
                  TNL::RPCGuaranteedOrdered, TNL::RPCDirServerToClient, 0)
{
// logic in here, of course
}

and I get this compiler error (in next post... 4096 char limit)

#1
10/20/2006 (8:28 am)
..\..\fsCore\things\MyNetObject.cpp(256) : error C2664: 'TNL::FunctorDecl<T>::FunctorDecl(void (__thiscall MyNetObject::* )(A,B,C,D,E,F,G,H,I))' : cannot convert parameter 1 from 'void (__thiscall MyNetObject::* )(TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Int<6>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>)' to 'void (__thiscall MyNetObject::* )(A,B,C,D,E,F,G,H,I)'
        with
        [
            T=void (__thiscall MyNetObject::* )(TNL::Float<16>,TNL::Float<16>,TNL::Int<9>,TNL::Float<16>,TNL::Float<16>,TNL::Float<16>,TNL::Float<16>,TNL::Float<16>,TNL::Float<16>),
            A=TNL::Float<16>,
            B=TNL::Float<16>,
            C=TNL::Int<9>,
            D=TNL::Float<16>,
            E=TNL::Float<16>,
            F=TNL::Float<16>,
            G=TNL::Float<16>,
            H=TNL::Float<16>,
            I=TNL::Float<16>
        ]
        and
        [
            bitCount=16
        ]
        and
        [
            A=TNL::Float<16>,
            B=TNL::Float<16>,
            C=TNL::Int<9>,
            D=TNL::Float<16>,
            E=TNL::Float<16>,
            F=TNL::Float<16>,
            G=TNL::Float<16>,
            H=TNL::Float<16>,
            I=TNL::Float<16>
        ]
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
..\..\fsCore\things\MyNetObject.cpp(256) : error C2511: 'void MyNetObject::rpcSetEnvironment(TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Int<9>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>)' : overloaded member function not found in 'MyNetObject'
        with
        [
            bitCount=16
        ]
        c:\wtf\tone\floatsim\fscore\things\MyNetObject.h(33) : see declaration of 'MyNetObject'
..\..\fsCore\things\MyNetObject.cpp(256) : error C2511: 'TNL::NetEvent *MyNetObject::rpcSetEnvironment_construct(TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Int<9>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>)' : overloaded member function not found in 'MyNetObject'
        with
        [
            bitCount=16
        ]
        c:\wtf\tone\floatsim\fscore\things\MyNetObject.h(33) : see declaration of 'MyNetObject'
..\..\fsCore\things\MyNetObject.cpp(256) : error C2511: 'void MyNetObject::rpcSetEnvironment_test(TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Int<9>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>)' : overloaded member function not found in 'FSShip'
        with
        [
            bitCount=16
        ]
        c:\wtf\tone\floatsim\fscore\things\MyNetObject.h(33) : see declaration of 'MyNetObject'
..\..\fsCore\things\MyNetObject.cpp(257) : error C2511: 'void MyNetObject::rpcSetEnvironment_remote(TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Int<9>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>,TNL::Float<bitCount>)' : overloaded member function not found in 'MyNetObject'
        with
        [
            bitCount=16
        ]
        c:\wtf\tone\floatsim\fscore\things\MyNetObject.h(33) : see declaration of 'MyNetObject'

What might be wrong?

tone
#2
10/20/2006 (8:41 am)
Ok... I have a simpler RPC working now. My mistakes were these:

1. Don't use TNL_IMPLEMENT_RPC in these cases, but TNL_IMPLEMENT_NETOBJECT_RPC
2. Replace the EventConnection "directionality" enums with RPCToGhost or RPCToGhostParent

That said, I am not seeing total success yet, but the remaining issue might be something similarly silly.

IMO the RPC Doxygen comment should allude to the NetObject case, and offer a link to that sub-variety.

tone