static unsafe void PrintSeedValues(ref f9sv.ClientReport rpt) { if (rpt.Seed_ == IntPtr.Zero) { if (rpt.ResultCode_ == f9sv.ResultCode.NoError) { // 「訂閱/查詢/取消訂閱」成功通知. // Console.WriteLine("layout="); // PrintSvLayout(ref rpt); } else { // 「訂閱/查詢/取消訂閱」失敗通知. } return; } uint fldidx = rpt.Tab_->FieldCount_; if (fldidx <= 0) { return; } f9sv.Field *fld = rpt.Tab_->FieldArray_; for (;;) { PrintSvField(fld, ref rpt); if (--fldidx <= 0) { break; } Console.Write('|'); ++fld; } Console.WriteLine(); }
static unsafe void PrintSvReport(string evName, ref f9sv.ClientReport rpt) { PrintEvSplit(evName); Console.WriteLine($"UserData={rpt.UserData_}, result={SvResultCodeStr(rpt.ResultCode_)}"); Console.WriteLine($"treePath=[{rpt.TreePath_}], seedKey=[{rpt.SeedKey_}], tab=[{rpt.Tab_->Named_.Name_}|{rpt.Tab_->Named_.Index_}]"); PrintSeedValues(ref rpt); Console.WriteLine("===================="); }
internal void OnSvSubscribeReport(ref f9rc.RcClientSession ses, ref f9sv.ClientReport rpt) { if (rpt.Seed_ == IntPtr.Zero) { // 訂閱結果通知. if (rpt.ResultCode_ == f9sv.ResultCode.NoError) { // 訂閱成功. } else { // 訂閱失敗. } } PrintSvReport("OnSv.SubscribeReport", ref rpt); }
static unsafe void PrintSvField(f9sv.Field *fld, ref f9sv.ClientReport rpt) { byte[] buf = new byte[1024]; uint sz = (uint)buf.Length; f9sv.Api.GetField_Str(rpt.Seed_, ref *fld, ref buf[0], ref sz); string val = Encoding.UTF8.GetString(buf, 0, (int)sz - 1 /*EOS*/); Console.Write($"{fld->Named_.Name_}=[{val}]"); { // 直接取出欄位的數值. if (fld->TypeId_[0] == 'U') { UInt64 uval = f9sv.Api.ReadUnsigned(rpt.Seed_, ref *fld); if (uval != 0 && uval == fld->NullValue_.Unsigned_) { Console.Write("()"); } else { Console.Write($"[{uval}]"); } } else if (fld->TypeId_[0] == 'S') { Int64 sval = f9sv.Api.ReadSigned(rpt.Seed_, ref *fld); if (sval != 0 && sval == fld->NullValue_.Signed_) { Console.Write("()"); } else { Console.Write($"[{sval}]"); } } } }
internal void OnSvUnsubscribeReport(ref f9rc.RcClientSession ses, ref f9sv.ClientReport rpt) { PrintSvReport("OnSv.UnsubscribeReport", ref rpt); }
internal void OnSvQueryReport(ref f9rc.RcClientSession ses, ref f9sv.ClientReport rpt) { PrintSvReport("OnSv.QueryReport", ref rpt); this.LastQueryReportedUserData_ = rpt.UserData_; }