2
0

fmain.pas 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. unit fmain;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls,
  6. IdHL7, IdTCPConnection;
  7. type
  8. { TForm1 }
  9. TForm1 = class(TForm)
  10. btnStart: TButton;
  11. btnListen: TButton;
  12. edtServerPort: TEdit;
  13. edtServer: TEdit;
  14. edtPort: TEdit;
  15. idHl7Client: TIdHL7;
  16. idHl7Server: TIdHL7;
  17. Label1: TLabel;
  18. Label2: TLabel;
  19. Label3: TLabel;
  20. Label4: TLabel;
  21. Label5: TLabel;
  22. memClient: TMemo;
  23. memClientReplyText: TMemo;
  24. memGeneral: TMemo;
  25. memServerReply: TMemo;
  26. memServer: TMemo;
  27. Panel1: TPanel;
  28. Panel2: TPanel;
  29. Panel3: TPanel;
  30. Panel4: TPanel;
  31. Panel5: TPanel;
  32. Panel6: TPanel;
  33. Panel7: TPanel;
  34. Panel8: TPanel;
  35. procedure btnListenClick(Sender: TObject);
  36. procedure btnStartClick(Sender: TObject);
  37. procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
  38. procedure FormCreate(Sender: TObject);
  39. procedure idHl7ClientConnCountChange(ASender: TIdHL7; AConnCount: integer);
  40. procedure idHl7ClientConnect(Sender: TObject);
  41. procedure idHl7ClientDisconnect(Sender: TObject);
  42. procedure idHl7ClientReceiveError(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string; AException: Exception; var VReply: string; var VDropConnection: boolean);
  43. procedure idHl7ServerConnCountChange(ASender: TIdHL7; AConnCount: integer);
  44. procedure idHl7ServerConnect(Sender: TObject);
  45. procedure idHl7ServerDisconnect(Sender: TObject);
  46. procedure idHl7ServerReceiveError(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string; AException: Exception; var VReply: string; var VDropConnection: boolean);
  47. procedure Panel3Click(Sender: TObject);
  48. protected
  49. procedure hl7ServerReceive(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string; var VHandled: boolean; var VReply: string);
  50. procedure hl7ServerMsgArrive(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string);
  51. procedure hl7clientReceive(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string; var VHandled: boolean; var VReply: string);
  52. private
  53. procedure clientSend();
  54. public
  55. end;
  56. var
  57. Form1: TForm1;
  58. implementation
  59. {$R *.lfm}
  60. { TForm1 }
  61. procedure TForm1.btnStartClick(Sender: TObject);
  62. begin
  63. if idHl7Client.Status = isConnected then begin
  64. idHl7Client.Stop;
  65. end;
  66. idHl7Client.Port := StrToInt(edtPort.Text);
  67. idHl7Client.Address := edtServer.Text;
  68. clientSend;
  69. end;
  70. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);
  71. begin
  72. if idHl7Client.Status = isConnected then begin
  73. idHl7Client.Stop;
  74. end;
  75. end;
  76. procedure TForm1.FormCreate(Sender: TObject);
  77. begin
  78. idHl7Server.OnReceiveMessage := @hl7ServerReceive;
  79. idHl7Server.OnMessageArrive := @hl7ServerMsgArrive;
  80. idHl7Client.OnReceiveMessage:= @hl7clientReceive;
  81. end;
  82. procedure TForm1.idHl7ClientConnCountChange(ASender: TIdHL7; AConnCount: integer);
  83. begin
  84. memGeneral.Lines.add('clientcon_count change : ');
  85. end;
  86. procedure TForm1.idHl7ClientConnect(Sender: TObject);
  87. begin
  88. memGeneral.Lines.add('clientconnect : ');
  89. end;
  90. procedure TForm1.idHl7ClientDisconnect(Sender: TObject);
  91. begin
  92. memGeneral.Lines.add('clientdisconenct : ');
  93. end;
  94. procedure TForm1.idHl7ClientReceiveError(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string; AException: Exception; var VReply: string; var VDropConnection: boolean);
  95. begin
  96. memGeneral.Lines.add('clientrcverr : ' + AException.Message);
  97. VDropConnection := True;
  98. end;
  99. procedure TForm1.idHl7ServerConnCountChange(ASender: TIdHL7; AConnCount: integer);
  100. begin
  101. memGeneral.Lines.add('servercon_count change : ');
  102. end;
  103. procedure TForm1.idHl7ServerConnect(Sender: TObject);
  104. begin
  105. memGeneral.Lines.add('serverconnect : ');
  106. end;
  107. procedure TForm1.idHl7ServerDisconnect(Sender: TObject);
  108. begin
  109. memGeneral.Lines.add('serverdisconenct : ');
  110. end;
  111. procedure TForm1.idHl7ServerReceiveError(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string; AException: Exception; var VReply: string; var VDropConnection: boolean);
  112. begin
  113. memGeneral.Lines.add('servrcverr : ' + AException.Message);
  114. VDropConnection := True;
  115. end;
  116. procedure TForm1.Panel3Click(Sender: TObject);
  117. begin
  118. end;
  119. procedure TForm1.hl7ServerReceive(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string; var VHandled: boolean; var VReply: string);
  120. begin
  121. vReply := memServerReply.Lines.Text;
  122. memServer.lines.text := Amsg;
  123. vhandled := True;
  124. memGeneral.Lines.add('servreceived '+AMsg+
  125. '- reply provided '+vReply);
  126. end;
  127. procedure TForm1.hl7ServerMsgArrive(ASender: TObject; AConnection: TIdTCPConnection; AMsg: string);
  128. begin
  129. memGeneral.Lines.add('servmsgarrive : ' + AMsg);
  130. memServer.lines.add(amsg);
  131. idHl7Server.AsynchronousSend(memServerReply.Lines.text,AConnection);
  132. end;
  133. procedure TForm1.hl7clientReceive(ASender: TObject;
  134. AConnection: TIdTCPConnection; AMsg: string; var VHandled: boolean;
  135. var VReply: string);
  136. begin
  137. memClientReplyText.lines.text := Amsg;
  138. vhandled := True;
  139. memGeneral.Lines.add('clreceived '+AMsg);
  140. end;
  141. procedure TForm1.clientSend;
  142. var
  143. iX: integer;
  144. sAnt: string;
  145. // vR : TSendResponse;
  146. vMsg : IInterface;
  147. begin
  148. if idHl7Client.Status <> isConnected then begin
  149. idHl7Client.Start;
  150. idHl7Client.WaitForConnection(10000);
  151. end;
  152. idHl7Client.SendMessage(memClient.Lines.Text);
  153. iX := 0;
  154. while (iX < 10) do begin
  155. Inc(iX);
  156. sleep(10);
  157. Application.ProcessMessages;
  158. (*vR*)vMsg := idHl7Client.GetMessage(sAnt);
  159. if vMsg <> nil (*vR = srOK*) then begin
  160. memClientReplyText.Lines.text := 'success : '+sAnt;
  161. break
  162. (* end else if vR = srError then begin
  163. memClientReplyText.Lines.text := 'error : '+sAnt;
  164. break;
  165. end else if vR = srTimeout then begin
  166. memClientReplyText.Lines.text := 'timeout waiting for reply ';
  167. break;*)
  168. end;
  169. end;
  170. // memClientReplyText.Lines.Text := sAnt;
  171. end;
  172. procedure TForm1.btnListenClick(Sender: TObject);
  173. begin
  174. if btnListen.Tag = 0 then begin
  175. idHl7Server.Port := StrToInt(edtServerPort.Text);
  176. idHl7Server.Start;
  177. btnListen.Tag := 1;
  178. btnListen.Caption := 'Stop';
  179. end else begin
  180. if idHl7Server.Status = isConnected then begin
  181. idHl7Server.Stop;
  182. end;
  183. btnListen.Caption := 'Start';
  184. btnListen.Tag := 0;
  185. end;
  186. end;
  187. end.