Skip to content

Commit ee63e36

Browse files
Search() API 尝试完全依赖 dp2mserver 回复结束包的做法
1 parent ad84789 commit ee63e36

File tree

6 files changed

+52
-6
lines changed

6 files changed

+52
-6
lines changed

DigitalPlatform.Message/MessageUtil.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@ public string Dump()
330330

331331
public string DumpRecords()
332332
{
333+
if (this.Records == null)
334+
return "{null}";
333335
StringBuilder text = new StringBuilder();
334336
int i = 0;
335337
foreach (Record record in this.Records)

DigitalPlatform.MessageClient/MessageConnection.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -831,21 +831,25 @@ public Task<SearchResult> SearchAsync(
831831
if (string.IsNullOrEmpty(request.TaskID) == true)
832832
request.TaskID = Guid.NewGuid().ToString();
833833

834+
Debug.WriteLine("using wait_events");
834835
using (WaitEvents wait_events = new WaitEvents()) // 表示中途数据到来
835836
{
837+
Debug.WriteLine("using handle");
836838
using (var handler = HubProxy.On<SearchResponse>(
837839
"responseSearch",
838840
(responseParam
839841
// taskID, resultCount, start, records, errorInfo, errorCode
840842
) =>
841843
{
842-
Task.Run(() =>
844+
//Task.Run(() =>
843845
{
844846
try
845847
{
846848
if (responseParam.TaskID != request.TaskID)
847849
return;
848850

851+
Debug.WriteLine("handler called. responseParam\r\n***\r\n" + responseParam.Dump() + "***\r\n");
852+
849853
// 装载命中结果
850854
if (responseParam.ResultCount == -1 && responseParam.Start == -1)
851855
{
@@ -856,6 +860,7 @@ public Task<SearchResult> SearchAsync(
856860
result.ErrorInfo = StringUtil.MakePathList(errors, "; ");
857861
result.ErrorCode = StringUtil.MakePathList(codes, ",");
858862

863+
Debug.WriteLine("finish_event.Set() 1");
859864
wait_events.finish_event.Set();
860865
return;
861866
}
@@ -892,19 +897,27 @@ public Task<SearchResult> SearchAsync(
892897
else
893898
result.ResultCount = manager.GetTotalCount();
894899

900+
#if NO
895901
if (nRet == 2)
902+
{
903+
Debug.WriteLine("finish_event.Set() 2");
896904
wait_events.finish_event.Set();
905+
}
897906
else
898907
wait_events.active_event.Set();
908+
#endif
909+
wait_events.active_event.Set();
910+
899911
}
900912
catch (Exception ex)
901913
{
902914
errors.Add("SearchAsync handler 内出现异常: " + ExceptionUtil.GetDebugText(ex));
903915
result.ErrorInfo = StringUtil.MakePathList(errors, "; ");
904-
wait_events.finish_event.Set();
916+
if (!(ex is ObjectDisposedException))
917+
wait_events.finish_event.Set();
905918
}
906919

907-
});
920+
}//);
908921
}))
909922
{
910923
MessageResult message = HubProxy.Invoke<MessageResult>(
@@ -915,11 +928,15 @@ public Task<SearchResult> SearchAsync(
915928
{
916929
result.ErrorInfo = message.ErrorInfo;
917930
result.ResultCount = -1;
931+
Debug.WriteLine("return pos 1");
918932
return result;
919933
}
920934

921935
if (manager.SetTargetCount(message.Value) == true)
936+
{
937+
Debug.WriteLine("return pos 2");
922938
return result;
939+
}
923940

924941
// start_time = DateTime.Now;
925942

@@ -938,11 +955,13 @@ public Task<SearchResult> SearchAsync(
938955
&& result.Records.Count > 0)
939956
{
940957
result.ErrorCode += ",_timeout"; // 附加一个错误码,表示虽然返回了结果,但是已经超时
958+
Debug.WriteLine("return pos 3");
941959
return result;
942960
}
943961
throw;
944962
}
945963

964+
Debug.WriteLine("return pos 4");
946965
return result;
947966
}
948967
}

DigitalPlatform.MessageClient/ResultManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public int CompleteTarget(string strLibraryUID, long total_count, long this_coun
9999
_targetTable[strLibraryUID] = info;
100100
}
101101
info.Recieved += this_count;
102-
Debug.WriteLine(strLibraryUID + "\r\n" + info.Dump());
102+
Debug.WriteLine("CompleteTarget() " + strLibraryUID + "\r\n" + info.Dump());
103103
if (info.Recieved >= info.TotalResults)
104104
{
105105
if (IsAllCompleted())

TestClient1/MainForm.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,11 @@ async void DoSearch()
609609
new TimeSpan(0, 1, 0),
610610
cancel_token);
611611

612+
Thread.Sleep(1000);
612613
this.Invoke(new Action(() =>
613614
{
614615
if (result.ResultCount == 0)
615-
SetTextString(this.webBrowser1, "没有找到");
616+
SetTextString(this.webBrowser1, "没有找到\r\n" + ToString(result));
616617
else
617618
SetTextString(this.webBrowser1, ToString(result));
618619
}));

dp2Capo/Instance.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ public void Initial(string strXmlFileName)
8181
this.dp2mserver = new HostInfo();
8282
this.dp2mserver.Initial(element);
8383

84+
this.MessageConnection.Instance = this;
8485
this.MessageConnection.dp2library = this.dp2library;
8586
}
8687
catch (Exception ex)

dp2Capo/ServerConnection.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System;
1+
#define LOG
2+
3+
using System;
24
using System.Collections.Generic;
35
using System.Linq;
46
using System.Text;
@@ -26,6 +28,7 @@ public class ServerConnection : MessageConnection
2628
public string UserName { get; set; }
2729
public string Password { get; set; }
2830
#endif
31+
public Instance Instance { get; set; } // 方便访问 Instance
2932

3033
public LibraryHostInfo dp2library { get; set; }
3134
internal LibraryChannelPool _channelPool = new LibraryChannelPool();
@@ -589,11 +592,20 @@ public override void OnSearchRecieved(SearchRequest param)
589592
Task.Run(() => SearchAndResponse(param));
590593
}
591594

595+
void writeDebug(string strText)
596+
{
597+
this.Instance.WriteErrorLog("debug: " + strText);
598+
}
599+
592600
// TODO: 本函数最好放在一个工作线程内执行
593601
// Form Close 的时候要及时中断工作线程
594602
// getPatronInfo getBiblioInfo getBiblioSummary searchBiblio searchPatron
595603
void SearchAndResponse(SearchRequest searchParam)
596604
{
605+
#if LOG
606+
writeDebug("searchParam=" + searchParam.Dump());
607+
#endif
608+
597609
if (searchParam.Operation == "getPatronInfo")
598610
{
599611
GetPatronInfo(searchParam);
@@ -661,6 +673,10 @@ void SearchAndResponse(SearchRequest searchParam)
661673
"",
662674
out strQueryXml,
663675
out strError);
676+
writeDebug("searchBiblio() lRet=" + lRet
677+
+ ", strQueryXml=" + strQueryXml
678+
+ ", strError=" + strError
679+
+ ",errorcode=" + channel.ErrorCode.ToString());
664680
}
665681
else if (searchParam.Operation == "searchPatron")
666682
{
@@ -810,6 +826,13 @@ void SendResults(
810826
out searchresults,
811827
out strError);
812828
strErrorCode = channel.ErrorCode.ToString();
829+
writeDebug("GetSearchResult lRet=" + lRet + ", strResultSetName=" + strResultSetName
830+
+ ",lStart=" + lStart
831+
+ ",lPerCount=" + lPerCount
832+
+ ",strBrowseStyle=" + strBrowseStyle
833+
+ ", strError=" + strError
834+
+ ",errorcode=" + strErrorCode);
835+
813836
if (lRet == -1)
814837
goto ERROR1;
815838

0 commit comments

Comments
 (0)