Merge pull request #2104 from nanoric/tap_wrappers
[Mod] TapGateway: roll back custom callback_wrapper to fix invalid po…
This commit is contained in:
commit
ff85ab7642
Binary file not shown.
@ -6,168 +6,169 @@
|
||||
|
||||
namespace c2py
|
||||
{
|
||||
// TapAPIOrderInfoNotice
|
||||
struct FixedTapAPIOrderInfoNotice : ITapTrade::TapAPIOrderInfoNotice
|
||||
// // TapAPIOrderInfoNotice
|
||||
// struct FixedTapAPIOrderInfoNotice : ITapTrade::TapAPIOrderInfoNotice
|
||||
// {
|
||||
// ITapTrade::TapAPIOrderInfo order_info;
|
||||
//
|
||||
// // copy from original structure
|
||||
// FixedTapAPIOrderInfoNotice(const ITapTrade::TapAPIOrderInfoNotice* info)
|
||||
// : TapAPIOrderInfoNotice(*info), order_info(info->OrderInfo != nullptr ? *info->OrderInfo : ITapTrade::TapAPIOrderInfo{})
|
||||
// {
|
||||
// // fix pointer if there is one
|
||||
// this->OrderInfo = info->OrderInfo != nullptr ? &this->order_info : nullptr;
|
||||
// }
|
||||
//
|
||||
// // copy constructor
|
||||
// FixedTapAPIOrderInfoNotice(const FixedTapAPIOrderInfoNotice& fixed)
|
||||
// : TapAPIOrderInfoNotice(fixed), order_info(fixed.order_info)
|
||||
// {
|
||||
// // fix pointer if there is one
|
||||
// this->OrderInfo = this->OrderInfo != nullptr ? &this->order_info : nullptr;
|
||||
// }
|
||||
// };
|
||||
// // TapAPIPositionProfit
|
||||
// struct FixedTapAPIPositionProfitNotice : ITapTrade::TapAPIPositionProfitNotice
|
||||
// {
|
||||
// ITapTrade::TapAPIPositionProfit data;
|
||||
//
|
||||
// // copy from original structure
|
||||
// FixedTapAPIPositionProfitNotice(const ITapTrade::TapAPIPositionProfitNotice* info)
|
||||
// : TapAPIPositionProfitNotice(*info), data(info->Data != nullptr ? *info->Data : ITapTrade::TapAPIPositionProfit{})
|
||||
// {
|
||||
// // fix pointer if there is one
|
||||
// this->Data = info->Data != nullptr ? &this->data : nullptr;
|
||||
// }
|
||||
//
|
||||
// // copy constructor
|
||||
// FixedTapAPIPositionProfitNotice(const FixedTapAPIPositionProfitNotice& fixed)
|
||||
// : TapAPIPositionProfitNotice(fixed), data(fixed.data)
|
||||
// {
|
||||
// // fix pointer if there is one
|
||||
// this->Data = this->Data != nullptr ? &this->data : nullptr;
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// namespace arg_helper
|
||||
// {
|
||||
// inline auto save(const ITapTrade::TapAPIOrderInfoNotice* info)
|
||||
// { // match char []
|
||||
// return FixedTapAPIOrderInfoNotice(info);
|
||||
// }
|
||||
//
|
||||
// template <>
|
||||
// struct loader<ITapTrade::TapAPIOrderInfoNotice>
|
||||
// {
|
||||
// inline FixedTapAPIOrderInfoNotice operator ()(FixedTapAPIOrderInfoNotice& val)
|
||||
// {
|
||||
// return val;
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// inline auto save(const ITapTrade::TapAPIPositionProfitNotice* info)
|
||||
// { // match char []
|
||||
// return FixedTapAPIPositionProfitNotice(info);
|
||||
// }
|
||||
//
|
||||
// template <>
|
||||
// struct loader<ITapTrade::TapAPIPositionProfitNotice>
|
||||
// {
|
||||
// inline FixedTapAPIPositionProfitNotice operator ()(FixedTapAPIPositionProfitNotice& val)
|
||||
// {
|
||||
// return val;
|
||||
// }
|
||||
// };
|
||||
// }
|
||||
|
||||
template<>
|
||||
struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>
|
||||
{
|
||||
ITapTrade::TapAPIOrderInfo order_info;
|
||||
|
||||
// copy from original structure
|
||||
FixedTapAPIOrderInfoNotice(const ITapTrade::TapAPIOrderInfoNotice* info)
|
||||
: TapAPIOrderInfoNotice(*info), order_info(info->OrderInfo != nullptr ? *info->OrderInfo : ITapTrade::TapAPIOrderInfo{})
|
||||
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, ITapTrade::TAPIUINT32 sessionID, ITapTrade::TAPIINT32 errorCode, const ITapTrade::TapAPIOrderActionRsp* info)
|
||||
{
|
||||
// fix pointer if there is one
|
||||
this->OrderInfo = info->OrderInfo != nullptr ? &this->order_info : nullptr;
|
||||
}
|
||||
ITapTrade::TapAPIOrderInfo orderInfo;
|
||||
if (info->OrderInfo != nullptr)
|
||||
{
|
||||
orderInfo = *info->OrderInfo;
|
||||
}
|
||||
ITapTrade::TapAPIOrderActionRsp copied_info = *info;
|
||||
auto task = [=]() mutable
|
||||
{
|
||||
if (copied_info.OrderInfo != nullptr)
|
||||
{
|
||||
copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
|
||||
}
|
||||
try
|
||||
{
|
||||
return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>::sync(instance, py_func_name, sessionID, errorCode, &copied_info);
|
||||
}
|
||||
catch (const async_dispatch_exception& e)
|
||||
{
|
||||
async_callback_exception_handler::handle_excepiton(e);
|
||||
}
|
||||
|
||||
// copy constructor
|
||||
FixedTapAPIOrderInfoNotice(const FixedTapAPIOrderInfoNotice& fixed)
|
||||
: TapAPIOrderInfoNotice(fixed), order_info(fixed.order_info)
|
||||
{
|
||||
// fix pointer if there is one
|
||||
this->OrderInfo = this->OrderInfo != nullptr ? &this->order_info : nullptr;
|
||||
}
|
||||
};
|
||||
// TapAPIPositionProfit
|
||||
struct FixedTapAPIPositionProfitNotice : ITapTrade::TapAPIPositionProfitNotice
|
||||
{
|
||||
ITapTrade::TapAPIPositionProfit data;
|
||||
|
||||
// copy from original structure
|
||||
FixedTapAPIPositionProfitNotice(const ITapTrade::TapAPIPositionProfitNotice* info)
|
||||
: TapAPIPositionProfitNotice(*info), data(info->Data != nullptr ? *info->Data : ITapTrade::TapAPIPositionProfit{})
|
||||
{
|
||||
// fix pointer if there is one
|
||||
this->Data = info->Data != nullptr ? &this->data : nullptr;
|
||||
}
|
||||
|
||||
// copy constructor
|
||||
FixedTapAPIPositionProfitNotice(const FixedTapAPIPositionProfitNotice& fixed)
|
||||
: TapAPIPositionProfitNotice(fixed), data(fixed.data)
|
||||
{
|
||||
// fix pointer if there is one
|
||||
this->Data = this->Data != nullptr ? &this->data : nullptr;
|
||||
};
|
||||
dispatcher::instance().add(std::move(task));
|
||||
}
|
||||
};
|
||||
|
||||
namespace arg_helper
|
||||
template<>
|
||||
struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>
|
||||
{
|
||||
inline auto save(const ITapTrade::TapAPIOrderInfoNotice* info)
|
||||
{ // match char []
|
||||
return FixedTapAPIOrderInfoNotice(info);
|
||||
}
|
||||
|
||||
template <>
|
||||
struct loader<ITapTrade::TapAPIOrderInfoNotice>
|
||||
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIOrderInfoNotice* info)
|
||||
{
|
||||
inline FixedTapAPIOrderInfoNotice operator ()(FixedTapAPIOrderInfoNotice& val)
|
||||
ITapTrade::TapAPIOrderInfo orderInfo;
|
||||
if (info->OrderInfo != nullptr)
|
||||
{
|
||||
return val;
|
||||
orderInfo = *info->OrderInfo;
|
||||
}
|
||||
};
|
||||
|
||||
inline auto save(const ITapTrade::TapAPIPositionProfitNotice* info)
|
||||
{ // match char []
|
||||
return FixedTapAPIPositionProfitNotice(info);
|
||||
ITapTrade::TapAPIOrderInfoNotice copied_info = *info;
|
||||
auto task = [=]() mutable
|
||||
{
|
||||
if (copied_info.OrderInfo != nullptr)
|
||||
{
|
||||
copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
|
||||
}
|
||||
try
|
||||
{
|
||||
return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>::sync(instance, py_func_name, &copied_info);
|
||||
}
|
||||
catch (const async_dispatch_exception& e)
|
||||
{
|
||||
async_callback_exception_handler::handle_excepiton(e);
|
||||
}
|
||||
};
|
||||
dispatcher::instance().add(std::move(task));
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct loader<ITapTrade::TapAPIPositionProfitNotice>
|
||||
template<>
|
||||
struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>
|
||||
{
|
||||
inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIPositionProfitNotice* info)
|
||||
{
|
||||
inline FixedTapAPIPositionProfitNotice operator ()(FixedTapAPIPositionProfitNotice& val)
|
||||
|
||||
ITapTrade::TapAPIPositionProfit profit;
|
||||
if (info->Data != nullptr)
|
||||
{
|
||||
return val;
|
||||
profit = *info->Data;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
//template<>
|
||||
//struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>
|
||||
//{
|
||||
// inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, ITapTrade::TAPIUINT32 sessionID, ITapTrade::TAPIINT32 errorCode, const ITapTrade::TapAPIOrderActionRsp* info)
|
||||
// {
|
||||
// ITapTrade::TapAPIOrderInfo orderInfo;
|
||||
// if (info->OrderInfo != nullptr)
|
||||
// {
|
||||
// orderInfo = *info->OrderInfo;
|
||||
// }
|
||||
// ITapTrade::TapAPIOrderActionRsp copied_info = *info;
|
||||
// auto task = [=]() mutable
|
||||
// {
|
||||
// if (copied_info.OrderInfo != nullptr)
|
||||
// {
|
||||
// copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
|
||||
// }
|
||||
// try
|
||||
// {
|
||||
// return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRspOrderAction>::sync(instance, py_func_name, sessionID, errorCode, &copied_info);
|
||||
// }
|
||||
// catch (const async_dispatch_exception& e)
|
||||
// {
|
||||
// async_callback_exception_handler::handle_excepiton(e);
|
||||
// }
|
||||
|
||||
// };
|
||||
// dispatcher::instance().add(std::move(task));
|
||||
// }
|
||||
//};
|
||||
//template<>
|
||||
//struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>
|
||||
//{
|
||||
// inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIOrderInfoNotice* info)
|
||||
// {
|
||||
// ITapTrade::TapAPIOrderInfo orderInfo;
|
||||
// if (info->OrderInfo != nullptr)
|
||||
// {
|
||||
// orderInfo = *info->OrderInfo;
|
||||
// }
|
||||
// ITapTrade::TapAPIOrderInfoNotice copied_info = *info;
|
||||
// auto task = [=]() mutable
|
||||
// {
|
||||
// if (copied_info.OrderInfo != nullptr)
|
||||
// {
|
||||
// copied_info.OrderInfo = &orderInfo; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
|
||||
// }
|
||||
// try
|
||||
// {
|
||||
// return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnOrder>::sync(instance, py_func_name, &copied_info);
|
||||
// }
|
||||
// catch (const async_dispatch_exception& e)
|
||||
// {
|
||||
// async_callback_exception_handler::handle_excepiton(e);
|
||||
// }
|
||||
// };
|
||||
// dispatcher::instance().add(std::move(task));
|
||||
// }
|
||||
//};
|
||||
|
||||
//template<>
|
||||
//struct callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>
|
||||
//{
|
||||
// inline static void call(ITapTrade::ITapTradeAPINotify* instance, const char* py_func_name, const ITapTrade::TapAPIPositionProfitNotice* info)
|
||||
// {
|
||||
|
||||
// ITapTrade::TapAPIPositionProfit profit;
|
||||
// if (info->Data != nullptr)
|
||||
// {
|
||||
// profit = *info->Data;
|
||||
// }
|
||||
// ITapTrade::TapAPIPositionProfitNotice copied_info = *info;
|
||||
// auto task = [=]() mutable
|
||||
// {
|
||||
// if (copied_info.Data != nullptr)
|
||||
// {
|
||||
// copied_info.Data = &profit; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
|
||||
// }
|
||||
// try
|
||||
// {
|
||||
// return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>::sync(instance, py_func_name, &copied_info);
|
||||
// }
|
||||
// catch (const async_dispatch_exception& e)
|
||||
// {
|
||||
// async_callback_exception_handler::handle_excepiton(e);
|
||||
// }
|
||||
// };
|
||||
// dispatcher::instance().add(std::move(task));
|
||||
// }
|
||||
//};
|
||||
ITapTrade::TapAPIPositionProfitNotice copied_info = *info;
|
||||
auto task = [=]() mutable
|
||||
{
|
||||
if (copied_info.Data != nullptr)
|
||||
{
|
||||
copied_info.Data = &profit; // ensure pointer is pointer to the correct address(address changes after constructed lambda)
|
||||
}
|
||||
try
|
||||
{
|
||||
return default_callback_wrapper<&ITapTrade::ITapTradeAPINotify::OnRtnPositionProfit>::sync(instance, py_func_name, &copied_info);
|
||||
}
|
||||
catch (const async_dispatch_exception& e)
|
||||
{
|
||||
async_callback_exception_handler::handle_excepiton(e);
|
||||
}
|
||||
};
|
||||
dispatcher::instance().add(std::move(task));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -115,30 +115,30 @@
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<OutDir>$(SolutionDir)</OutDir>
|
||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<OutDir>$(SolutionDir)</OutDir>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<OutDir>$(SolutionDir)</OutDir>
|
||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<TargetExt>.pyd</TargetExt>
|
||||
<OutDir>$(SolutionDir)</OutDir>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;$(LibraryPath)</LibraryPath>
|
||||
<IncludePath>$(ProjectDir);$(ProjectDir)include;C:\Python37\include;C:\Python373\include;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)\libs;C:\Python37\libs;C:\Python373\libs;$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
|
@ -98,8 +98,5 @@
|
||||
<ClCompile Include="generated_files\generated_functions_10.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="generated_files\generated_functions_11.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user