investigate repro
Follow
.github\Rules\new-sample.md.github\Rules\new-sample-rpc.md.github\Rules\document-and-commit.mdto add new samples, indentation should be double spaces no matter how the code below is written:
RPC samples are split into two files:
Rpc\SAMPLE.txtcontains only RPC definitions.Rpc\SAMPLE_Test.txtcontains executable test logic, including globals, helpers,serviceMain, andclientMain.
Only SAMPLE is added to IndexRpc.txt. Both files must appear in CompilerTest_LoadAndCompile under Resource Files\Rpc.
In this task you are going to build and run test cases to verify if these cases are working, according to Workflow Interface-Based RPC Definition. This test is to ensure that:
- Wrapper Workflow Script code generation take members of base types of interfaces into consideration recursively.
If the current implemention is correct, the added samples should just pass the test.
module Rpc;
using system::*;
namespace YourFavoriteNamespace // use RpcInheritance
{
@rpc:Interface
interface IDerived : IOne, ITwo
{
func SetDerivedValue() : void;
}
@rpc:Interface
interface IValue
{
@rpc:Cached
prop Value : string {const, observe}
}
@rpc:Interface
interface IOne : IValue
{
func SetOneValue() : void;
}
@rpc:Interface
interface ITwo : IValue
{
func SetITwoValue() : void;
}
@rpc:Interface
@rpc:Ctor
interface IService
{
func CreateOne() : IOne^;
func CreateTwo() : ITwo^;
func CreateDerivec() : IDerived^;
}
}module Rpc;
using system::*;
using RpcWrapperTest::*;
using YourFavoriteNamespace::*;
var s = "";
func serviceMain(lc : IRpcLifecycle*) : void
{
var serviceObj = new (YourFavoriteNamespace::IService^)
{
override func CreateOne() : IOne^
{
return new IOne^
{
var value : string = "";
override func GetValue() : string { return value; }
override func SetOneValue() : void
{
value = "One";
ValueChanged();
}
}
}
override func CreateTwo() : ITwo^
{
// Copy CreateOne but set the value to "Two"
}
override func CreateDerived() : IDerived^
{
// Copy CreateOne but set the value to "Derived"
// Meanwhile Set(One|Two)Value should raise exception
}
};
lc.RegisterService("YourFavoriteNamespace::IService", serviceObj);
}
func clientMain(lc : IRpcLifecycle*) : string
{
var service = cast (YourFavoriteNamespace::IService^) lc.RequestService("YourFavoriteNamespace::IService");
var one = cast (IOne^) service.CreateOne();
// repeat for two and derived
s = $"$(s)[$(one.Value)]";
one.SetOneValue();
s = $"$(s)[$(one.Value)]";
// repeat for two and derived
return s; // [][One][][Two][][Derived]
}