Ok perfect!

F.D.

On Thu, Aug 2, 2018 at 3:11 PM Igor Sapego <[email protected]> wrote:

> You may also use rawWriter. The point is, you should
> not use non-raw user, when you already started using raw.
>
> Best Regards,
> Igor
>
>
> On Thu, Aug 2, 2018 at 3:58 PM F.D. <[email protected]> wrote:
>
>> My fault!!! I modified the code in this way:
>>
>>    static void Write(BinaryWriter& writer, const Calculation& obj)
>>    {
>>       writer.WriteBool("local_log", obj.local_log_);
>>       writer.WriteString("service_name", obj.service_name_);
>>
>>       auto sa_writer = writer.WriteStringArray("input");
>>       for(const auto &s : obj.input_)
>>          sa_writer.Write(s);
>>       sa_writer.Close();
>>    }
>>
>>    static void Read(BinaryReader& reader, Calculation& dst)
>>    {
>>       dst.local_log_ = reader.ReadBool("local_log");
>>       dst.service_name_ = reader.ReadString("service_name");
>>
>>       auto sa_reader = reader.ReadStringArray("input");
>>       while(sa_reader.HasNext())
>>          dst.input_.push_back(sa_reader.GetNext());
>>    }
>>
>> and now work perfectly!
>>
>> Sorry and thanks again!
>>    F.D.
>>
>>
>>
>> On Thu, Aug 2, 2018 at 2:52 PM F.D. <[email protected]> wrote:
>>
>>> Here we go. Maybe the problem is the vector<std::string> inside the
>>> class Calculation.
>>>
>>> namespace ignite {
>>> namespace binary {
>>>
>>> template<>
>>> struct BinaryType<Calculation>
>>> {
>>>    static int32_t GetTypeId()
>>>    {
>>>       return GetBinaryStringHashCode("Calculation");
>>>    }
>>>
>>>    static void GetTypeName(std::string& dst)
>>>    {
>>>       dst = "Calculation";
>>>    }
>>>
>>>    static int32_t GetFieldId(const char* name)
>>>    {
>>>       return GetBinaryStringHashCode(name);
>>>    }
>>>
>>>    static int32_t GetHashCode(const Calculation& obj)
>>>    {
>>>       return 0;
>>>    }
>>>
>>>    static bool IsNull(const Calculation& obj)
>>>    {
>>>       return false;
>>>    }
>>>
>>>    static void GetNull(Calculation& dst)
>>>    {
>>>       dst = Calculation();
>>>    }
>>>
>>>    static void Write(BinaryWriter& writer, const Calculation& obj)
>>>    {
>>>       writer.RawWriter().WriteBool(obj.local_log_);
>>>       writer.RawWriter().WriteString(obj.service_name_);
>>>
>>>       auto sa_writer = writer.WriteStringArray("input");
>>>       for(const auto &s : obj.input_)
>>>          sa_writer.Write(s);
>>>       sa_writer.Close();
>>>    }
>>>
>>>    static void Read(BinaryReader& reader, Calculation& dst)
>>>    {
>>>       dst.local_log_ = reader.RawReader().ReadBool();
>>>       dst.service_name_ = reader.RawReader().ReadString();
>>>
>>>       auto sa_reader = reader.ReadStringArray("input");
>>>       while(sa_reader.HasNext())
>>>          dst.input_.push_back(sa_reader.GetNext());
>>>    }
>>> };
>>>
>>> template<>
>>> struct BinaryType<std::vector<std::string>>
>>> {
>>>    typedef std::vector<std::string> value_type;
>>>
>>>    static int32_t GetTypeId()
>>>    {
>>>       return GetBinaryStringHashCode("VectorOfString");
>>>    }
>>>
>>>    static void GetTypeName(std::string& dst)
>>>    {
>>>       dst = "VectorOfString";
>>>    }
>>>
>>>    static int32_t GetFieldId(const char* name)
>>>    {
>>>       return GetBinaryStringHashCode(name);
>>>    }
>>>
>>>    static int32_t GetHashCode(const std::vector<std::string> &obj)
>>>    {
>>>       return 0;
>>>    }
>>>
>>>    static bool IsNull(const std::vector<std::string> &obj)
>>>    {
>>>       return !obj.size();
>>>    }
>>>
>>>    static void GetNull(std::vector<std::string> &dst)
>>>    {
>>>       dst = value_type();
>>>    }
>>>
>>>    static void Write(BinaryWriter &writer, const
>>> std::vector<std::string> &obj)
>>>    {
>>>       auto sa_writer = writer.WriteStringArray("items");
>>>       for(const auto &s : obj)
>>>          sa_writer.Write(s);
>>>       sa_writer.Close();
>>>    }
>>>
>>>    static void Read(BinaryReader &reader, std::vector<std::string> &dst)
>>>    {
>>>       auto sa_reader = reader.ReadStringArray("items");
>>>       while(sa_reader.HasNext())
>>>          dst.push_back(sa_reader.GetNext());
>>>    }
>>> };
>>>
>>> } } // namespace ignite binary
>>>
>>> Thanks,
>>>    F.D.
>>>
>>>
>>> On Thu, Aug 2, 2018 at 10:14 AM Igor Sapego <[email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> Can you show how you define BinaryType? Because the error
>>>> you are receiving is related to serialization/deserialization process.
>>>>
>>>> Best Regards,
>>>> Igor
>>>>
>>>>
>>>> On Thu, Aug 2, 2018 at 9:15 AM F.D. <[email protected]> wrote:
>>>>
>>>>> Hi Igniters,
>>>>>
>>>>> finally, I've compiled my code and run my test. But after I call my
>>>>> closure I got this errors: "Operation cannot be performed in raw mode.",
>>>>> and unfortunally I've no idea what it does mean.
>>>>>
>>>>> This is the code of call:
>>>>>
>>>>> IgniteConfiguration cfg;
>>>>> std::string home = getenv("IGNITE_HOME");
>>>>> fs::path cfg_path = fs::path(home) / "platforms" / "cpp" /
>>>>> "client_config.xml";
>>>>> cfg.springCfgPath = cfg_path.string();
>>>>>
>>>>> ignite = Ignition::Start(cfg);
>>>>>
>>>>> IgniteBinding binding = ignite.GetBinding();
>>>>> binding.RegisterComputeFunc<Calculation>();
>>>>>
>>>>> Compute compute = ignite.GetCompute();
>>>>>
>>>>> [...]
>>>>>
>>>>> Calculation functor(name, args, false);
>>>>> auto fut = compute.CallAsync<std::string>(functor);
>>>>>
>>>>> [...]
>>>>>
>>>>> And Calculation is:
>>>>>
>>>>> class CalculationEngineIgniteServer: public
>>>>> ignite::compute::ComputeFunc<std::string>
>>>>> {
>>>>>    friend struct
>>>>> ignite::binary::BinaryType<CalculationEngineIgniteServer>;
>>>>> public:
>>>>>    CalculationEngineIgniteServer(
>>>>>    ) = default;
>>>>>    CalculationEngineIgniteServer(
>>>>>       const std::string &name,
>>>>>       const std::vector<std::string> &input,
>>>>>       bool localLog
>>>>>    );
>>>>>
>>>>>    virtual std::string Call();
>>>>>
>>>>> private:
>>>>>    std::string name_;
>>>>>    bool local_log_;
>>>>>
>>>>>    std::vector<std::string> input_;
>>>>> };
>>>>>
>>>>> Then I defined BinaryType for Calculation and for
>>>>> std::vector<std::string>. I don't understand where I miss.
>>>>>
>>>>> Thanks,
>>>>>     F.D.
>>>>>
>>>>>

Reply via email to