Changeset 24
- Timestamp:
- Nov 19, 2012, 12:31:19 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 20 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ChronIS.lpi
r23 r24 118 118 </Item11> 119 119 </RequiredPackages> 120 <Units Count="1 7">120 <Units Count="18"> 121 121 <Unit0> 122 122 <Filename Value="ChronIS.lpr"/> … … 230 230 <UnitName Value="UTerminalBF630"/> 231 231 </Unit16> 232 <Unit17> 233 <Filename Value="Application/UMenu.pas"/> 234 <IsPartOfProject Value="True"/> 235 <UnitName Value="UMenu"/> 236 </Unit17> 232 237 </Units> 233 238 </ProjectOptions> -
trunk/ChronIS.lpr
r23 r24 13 13 PrintPreview, UFormConnection, UModuleAttendance, UDataModel, 14 14 UFormVirtualTerminal, UAccessControler, UModuleChiyuAccessControlers, 15 UTerminalBF630 ;15 UTerminalBF630, UMenu; 16 16 17 17 {$R *.res} -
trunk/Forms/UFormEdit.lfm
r16 r24 1 1 object FormEdit: TFormEdit 2 Left = 3683 Height = 3 414 Top = 1 725 Width = 5532 Left = 297 3 Height = 368 4 Top = 145 5 Width = 664 6 6 Caption = 'Edit item' 7 ClientHeight = 3 418 ClientWidth = 5537 ClientHeight = 368 8 ClientWidth = 664 9 9 OnCreate = FormCreate 10 10 OnDestroy = FormDestroy 11 11 LCLVersion = '1.1' 12 12 object ButtonOk: TButton 13 Left = 47113 Left = 582 14 14 Height = 25 15 Top = 30515 Top = 291 16 16 Width = 75 17 17 Anchors = [akRight, akBottom] … … 21 21 end 22 22 object ButtonCancel: TButton 23 Left = 38323 Left = 582 24 24 Height = 25 25 Top = 30525 Top = 251 26 26 Width = 75 27 27 Anchors = [akRight, akBottom] … … 30 30 TabOrder = 1 31 31 end 32 object Bevel1: TBevel33 Left = 834 Height = 235 Top = 29736 Width = 53837 Anchors = [akLeft, akRight, akBottom]38 end39 32 object PanelControls: TPanel 40 33 Left = 8 41 Height = 28234 Height = 308 42 35 Top = 8 43 Width = 5 3744 Align = al Top36 Width = 567 37 Align = alLeft 45 38 Anchors = [akTop, akLeft, akRight, akBottom] 46 39 BorderSpacing.Around = 8 … … 48 41 TabOrder = 2 49 42 end 43 object ToolBarActions: TToolBar 44 Left = 0 45 Height = 44 46 Top = 324 47 Width = 664 48 Align = alBottom 49 ButtonHeight = 40 50 ButtonWidth = 44 51 Images = FormMain.ImageList1 52 ParentShowHint = False 53 ShowCaptions = True 54 ShowHint = True 55 TabOrder = 3 56 end 50 57 end -
trunk/Forms/UFormEdit.pas
r17 r24 46 46 47 47 TFormEdit = class(TForm) 48 Bevel1: TBevel;49 48 ButtonOk: TButton; 50 49 ButtonCancel: TButton; 51 50 PanelControls: TPanel; 51 ToolBarActions: TToolBar; 52 52 procedure FormCreate(Sender: TObject); 53 53 procedure FormDestroy(Sender: TObject); -
trunk/Forms/UFormList.lfm
r23 r24 345 345 object PrintPreview1: TPrintPreview 346 346 Zoom = 1 347 OnPrint = PrintPreview1Print 347 348 left = 240 348 349 top = 112 -
trunk/Forms/UFormList.pas
r23 r24 82 82 procedure ListView1SelectItem(Sender: TObject; Item: TListItem; 83 83 Selected: Boolean); 84 procedure PrintPreview1Print(Sender: TObject); 84 85 private 85 86 FView: TDataViewList; … … 249 250 end; 250 251 252 procedure TFormList.PrintPreview1Print(Sender: TObject); 253 begin 254 255 end; 256 251 257 procedure TFormList.SetView(AValue: TDataViewList); 252 258 begin -
trunk/Forms/UFormMain.lfm
r14 r24 276 276 end 277 277 end 278 object MenuItem10: TMenuItem 279 Caption = 'Test' 280 object MenuItem11: TMenuItem 281 Action = DataModuleAttendance.AReadFromTerminal 282 end 283 end 278 284 object MenuItem7: TMenuItem 279 285 Caption = 'Help' -
trunk/Forms/UFormMain.lrt
r14 r24 3 3 TFORMMAIN.MENUITEM3.CAPTION=Database 4 4 TFORMMAIN.MENUITEM6.CAPTION=View 5 TFORMMAIN.MENUITEM10.CAPTION=Test 5 6 TFORMMAIN.MENUITEM7.CAPTION=Help 6 7 TFORMMAIN.AEXIT.CAPTION=Exit -
trunk/Forms/UFormMain.pas
r23 r24 25 25 MainMenu1: TMainMenu; 26 26 MenuItem1: TMenuItem; 27 MenuItem10: TMenuItem; 28 MenuItem11: TMenuItem; 27 29 MenuItem3: TMenuItem; 28 30 MenuItem4: TMenuItem; … … 155 157 procedure TFormMain.FormShow(Sender: TObject); 156 158 begin 159 Core.CoolTranslator1.TranslateComponentRecursive(Application); 157 160 UpdateInterface; 158 161 AConnect.Execute; -
trunk/Languages/ChronIS.cs.po
r23 r24 195 195 msgstr "ChronIS" 196 196 197 #: tformmain.menuitem10.caption 198 msgid "Test" 199 msgstr "" 200 197 201 #: tformmain.menuitem3.caption 198 202 msgid "Database" … … 217 221 msgstr "NastavenÃ" 218 222 223 #: tformvirtualaccesscontroler.buttonpress.caption 224 msgid "Press" 225 msgstr "" 226 219 227 #: tformvirtualaccesscontroler.caption 220 228 msgid "Virtual Access Controler" 229 msgstr "" 230 231 #: tformvirtualaccesscontroler.label1.caption 232 msgid "User id:" 233 msgstr "" 234 235 #: tformvirtualaccesscontroler.label2.caption 236 msgid "Key id:" 237 msgstr "" 238 239 #: tformvirtualaccesscontroler.label3.caption 240 msgid "Time:" 241 msgstr "" 242 243 #: tformvirtualaccesscontroler.labeltime.caption 244 msgid " " 221 245 msgstr "" 222 246 … … 533 557 msgstr "UÅŸivatel" 534 558 559 #: umoduleattendance.susersread 560 msgid "User read: %s" 561 msgstr "" 562 535 563 #: umoduleattendance.syear 536 564 msgctxt "umoduleattendance.syear" … … 546 574 msgstr "" 547 575 576 #: uterminalbf630.swrongid 577 msgid "Wrong id" 578 msgstr "" 579 -
trunk/Languages/ChronIS.po
r23 r24 176 176 msgstr "" 177 177 178 #: tformmain.menuitem10.caption 179 msgid "Test" 180 msgstr "" 181 178 182 #: tformmain.menuitem3.caption 179 183 msgid "Database" … … 196 200 msgstr "" 197 201 202 #: tformvirtualaccesscontroler.buttonpress.caption 203 msgid "Press" 204 msgstr "" 205 198 206 #: tformvirtualaccesscontroler.caption 199 207 msgid "Virtual Access Controler" 208 msgstr "" 209 210 #: tformvirtualaccesscontroler.label1.caption 211 msgid "User id:" 212 msgstr "" 213 214 #: tformvirtualaccesscontroler.label2.caption 215 msgid "Key id:" 216 msgstr "" 217 218 #: tformvirtualaccesscontroler.label3.caption 219 msgid "Time:" 220 msgstr "" 221 222 #: tformvirtualaccesscontroler.labeltime.caption 223 msgid " " 200 224 msgstr "" 201 225 … … 511 535 msgstr "" 512 536 537 #: umoduleattendance.susersread 538 msgid "User read: %s" 539 msgstr "" 540 513 541 #: umoduleattendance.syear 514 542 msgctxt "umoduleattendance.syear" … … 524 552 msgstr "" 525 553 554 #: uterminalbf630.swrongid 555 msgid "Wrong id" 556 msgstr "" 557 -
trunk/Modules/Attendance/UAccessControler.pas
r20 r24 6 6 7 7 uses 8 Classes, SysUtils ;8 Classes, SysUtils, UAttendance, UCommPin; 9 9 10 10 type 11 12 11 { TAccessControler } 13 12 14 13 TAccessControler = class 15 (* function GetUser(Id: Integer): TUser; 16 function GetUserCount: Integer; 17 function GetPassage(Id: Integer): TPassage; 18 function GetPassageCount: Integer;*) 14 private 15 FActive: Boolean; 16 protected 17 procedure SetActive(AValue: Boolean); virtual; 18 public 19 Id: Integer; 20 Pin: TCommPin; 21 constructor Create; virtual; 22 destructor Destroy; override; 23 function GetUser(Id: Integer; User: TUser): Boolean; virtual; 24 function GetUserCount: Integer; virtual; 25 function GetPassage(Id: Integer; Passage: TUserPassage): Boolean; virtual; 26 function GetPassageCount: Integer; virtual; 27 property Active: Boolean read FActive write SetActive; 19 28 end; 20 29 … … 23 32 { TAccessControler } 24 33 25 (*function TAccessControler.GetUser(Id: Integer): TUser; 34 procedure TAccessControler.SetActive(AValue: Boolean); 35 begin 36 if FActive = AValue then Exit; 37 FActive := AValue; 38 end; 39 40 constructor TAccessControler.Create; 41 begin 42 Pin := TCommPin.Create; 43 Id := 1; 44 end; 45 46 destructor TAccessControler.Destroy; 47 begin 48 FreeAndNil(Pin); 49 inherited Destroy; 50 end; 51 52 function TAccessControler.GetUser(Id: Integer; User: TUser): Boolean; 26 53 begin 27 54 … … 33 60 end; 34 61 35 function TAccessControler.GetPassage(Id: Integer ): TPassage;62 function TAccessControler.GetPassage(Id: Integer; Passage: TUserPassage): Boolean; 36 63 begin 37 64 … … 41 68 begin 42 69 43 end; *)70 end; 44 71 45 72 end. -
trunk/Modules/Attendance/UFormVirtualTerminal.lfm
r20 r24 5 5 Width = 353 6 6 Caption = 'Virtual Access Controler' 7 ClientHeight = 276 8 ClientWidth = 353 7 9 LCLVersion = '1.1' 10 object SpinEditUser: TSpinEdit 11 Left = 72 12 Height = 21 13 Top = 8 14 Width = 83 15 TabOrder = 0 16 end 17 object Label1: TLabel 18 Left = 6 19 Height = 13 20 Top = 10 21 Width = 37 22 Caption = 'User id:' 23 ParentColor = False 24 end 25 object Label2: TLabel 26 Left = 7 27 Height = 13 28 Top = 41 29 Width = 33 30 Caption = 'Key id:' 31 ParentColor = False 32 end 33 object SpinEditKey: TSpinEdit 34 Left = 72 35 Height = 21 36 Top = 40 37 Width = 82 38 TabOrder = 1 39 end 40 object Label3: TLabel 41 Left = 9 42 Height = 13 43 Top = 72 44 Width = 26 45 Caption = 'Time:' 46 ParentColor = False 47 end 48 object LabelTime: TLabel 49 Left = 72 50 Height = 13 51 Top = 72 52 Width = 12 53 Caption = ' ' 54 ParentColor = False 55 end 56 object ButtonPress: TButton 57 Left = 72 58 Height = 25 59 Top = 113 60 Width = 75 61 Caption = 'Press' 62 TabOrder = 2 63 end 64 object Timer1: TTimer 65 OnTimer = Timer1Timer 66 left = 241 67 top = 78 68 end 8 69 end -
trunk/Modules/Attendance/UFormVirtualTerminal.lrt
r20 r24 1 1 TFORMVIRTUALACCESSCONTROLER.CAPTION=Virtual Access Controler 2 TFORMVIRTUALACCESSCONTROLER.LABEL1.CAPTION=User id: 3 TFORMVIRTUALACCESSCONTROLER.LABEL2.CAPTION=Key id: 4 TFORMVIRTUALACCESSCONTROLER.LABEL3.CAPTION=Time: 5 TFORMVIRTUALACCESSCONTROLER.LABELTIME.CAPTION= 6 TFORMVIRTUALACCESSCONTROLER.BUTTONPRESS.CAPTION=Press -
trunk/Modules/Attendance/UFormVirtualTerminal.pas
r20 r24 6 6 7 7 uses 8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs; 8 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Spin, 9 StdCtrls, ExtCtrls; 9 10 10 11 type … … 12 13 end; 13 14 15 { TFormVirtualAccessControler } 16 14 17 TFormVirtualAccessControler = class(TForm) 18 ButtonPress: TButton; 19 Label1: TLabel; 20 Label2: TLabel; 21 Label3: TLabel; 22 LabelTime: TLabel; 23 SpinEditUser: TSpinEdit; 24 SpinEditKey: TSpinEdit; 25 Timer1: TTimer; 26 procedure Timer1Timer(Sender: TObject); 15 27 private 16 28 { private declarations } … … 26 38 {$R *.lfm} 27 39 40 { TFormVirtualAccessControler } 41 42 procedure TFormVirtualAccessControler.Timer1Timer(Sender: TObject); 43 begin 44 LabelTime.Caption := DateTimeToStr(Now); 45 end; 46 28 47 end. 29 48 -
trunk/Modules/Attendance/UModuleAttendance.lfm
r20 r24 7 7 object ActionList1: TActionList 8 8 Images = FormMain.ImageList1 9 left = 30010 top = 1049 left = 160 10 top = 56 11 11 object AReadFromTerminal: TAction 12 12 Caption = 'Read from terminal' … … 15 15 end 16 16 end 17 object PopupMenu1: TPopupMenu 18 Images = FormMain.ImageList1 19 left = 56 20 top = 56 21 object MenuItem1: TMenuItem 22 Action = AReadFromTerminal 23 end 24 end 17 25 end -
trunk/Modules/Attendance/UModuleAttendance.pas
r20 r24 7 7 uses 8 8 Classes, SysUtils, FileUtil, UModularSystem, UFormList, UFormEdit, Controls, 9 SpecializedList, Forms, ActnList, UDataModel;9 SpecializedList, Forms, ActnList, Menus, UDataModel, Dialogs, SpecializedDictionary; 10 10 11 11 type … … 16 16 AReadFromTerminal: TAction; 17 17 ActionList1: TActionList; 18 MenuItem1: TMenuItem; 19 PopupMenu1: TPopupMenu; 18 20 procedure AReadFromTerminalExecute(Sender: TObject); 19 21 private … … 68 70 69 71 uses 70 UFormMain, UCore ;72 UFormMain, UCore, UTerminalBF630, UAccessControler, UAttendance; 71 73 72 74 resourcestring … … 100 102 SHoliday = 'Holiday'; 101 103 SLog = 'Log'; 104 SUsersRead = 'User read: %s'; 102 105 103 106 { TDataModuleAttendance } 104 107 105 108 procedure TDataModuleAttendance.AReadFromTerminalExecute(Sender: TObject); 106 begin 107 109 var 110 AccessControler: TAccessControler; 111 VirtualAccessControler: TVirtualTerminalBF630; 112 UserCount: Integer; 113 UserRec: TUser; 114 Data: TDictionaryStringString; 115 I: Integer; 116 begin 117 Data := nil; 118 UserRec := nil; 119 AccessControler := nil; 120 try 121 VirtualAccessControler := TVirtualTerminalBF630.Create; 122 VirtualAccessControler.InitDemoData; 123 VirtualAccessControler.Active := True; 124 125 AccessControler := TTerminalBF630.Create; 126 AccessControler.Active := True; 127 UserCount := AccessControler.GetUserCount; 128 129 UserRec := TUser.Create; 130 Data := TDictionaryStringString.Create; 131 for I := 0 to UserCount - 1 do begin 132 Data.Clear; 133 AccessControler.GetUser(I, UserRec); 134 Data.Add('FirstName', UserRec.FirstName); 135 Data.Add('SecondName', UserRec.SecondName); 136 Core.Database.Insert('User', Data); 137 end; 138 ShowMessage(SUsersRead + IntToStr(UserCount)); 139 finally 140 if Assigned(Data) then Data.Free; 141 if Assigned(UserRec) then UserRec.Free; 142 if Assigned(AccessControler) then AccessControler.Free; 143 VirtualAccessControler.Free; 144 end; 108 145 end; 109 146 -
trunk/Modules/ChiyuAccessControlers/UTerminalBF630.pas
r23 r24 6 6 7 7 uses 8 Classes, SysUtils, UBinarySerializer, UCommTCPServer, UCommPin, SyncObjs, DateUtils, 9 SpecializedList, SpecializedStream, Forms, UCommTCPClient, Dialogs; 8 Classes, SysUtils, UBinarySerializer, UCommTCPServer, UCommPin, SyncObjs, 9 SpecializedList, SpecializedStream, Forms, UCommTCPClient, Dialogs, DateUtils, 10 UAccessControler, UAttendance; 10 11 11 12 const … … 45 46 toAntiDuressGet = $97, toSrcurityBypassGetStatus = $98, 46 47 toTimeSet = $a6, toTimeZoneAdd = $a7, toGroupAdd = $a8, 47 toDoorSettingSet = $a9, toHolidayAdd = $aa, toDesignationAdd = $ac, 48 toDoorSettingSet = $a9, toHolidayAdd = $aa, 49 toUserAdd = $ab, toDesignationAdd = $ac, toDepartmentAdd = $ad, 48 50 toTimeDel = $b6, toTimeZoneDel = $b7, toGroupDel = $b8, 49 51 toSecurityBypass = $b9, toHolidayDel = $ba, 50 toDesignationDel = $bc, toDepartment Add= $bd,52 toDesignationDel = $bc, toDepartmentDel = $bd, 51 53 toTimeDelAll = $c6, toZimeZoneDelAll = $c7, toGroupDelAll = $c8, 52 54 toHolidayDelAll = $ca, toDesignationDelAll = $cc, toDepartmentDelAll = $cd, … … 59 61 { TTerminalBF630 } 60 62 61 TTerminalBF630 = class 63 TTerminalBF630 = class(TAccessControler) 62 64 private 63 FActive: Boolean;64 65 ReceiveData: TListByte; 65 66 ReceiveDataThread: TListByte; … … 67 68 SendTime: TDateTime; 68 69 procedure ReceiveDataHandler(Sender: TCommPin; AList: TListByte); 69 procedure SetActive(AValue: Boolean);70 70 procedure WaitForBytes(Count: Integer); 71 protected 72 procedure SetActive(AValue: Boolean); override; 71 73 public 72 Id: Integer;73 74 CommSocket: TCommTCPClient; 74 Pin: TCommPin;75 75 AccessKey: array[0..5] of Byte; 76 76 UseAccessKey: Boolean; … … 80 80 function SendPacket(Command: TTerminalOperation; Request: TListByte = nil; Response: TListByte = nil): Byte; 81 81 function ReadDateTime: TDateTime; 82 function GetUserCount: Integer; 83 property Active: Boolean read FActive write SetActive;84 constructor Create; 82 function GetUserCount: Integer; override; 83 function GetUser(Id: Integer; User: TUser): Boolean; override; 84 constructor Create; override; 85 85 destructor Destroy; override; 86 86 end; … … 102 102 TVirtualTerminalBF630User = class 103 103 Id: Integer; 104 Name: string; 104 FirstName: string; 105 SecondName: string; 105 106 end; 106 107 … … 139 140 resourcestring 140 141 SCommunicatiomTimeout = 'Communication timeout'; 142 SWrongId = 'Wrong id'; 141 143 142 144 { TVirtualTerminalBF630Session } … … 155 157 Command: Byte; 156 158 ResultCode: Byte; 157 OldPos: Integer;158 159 begin 159 160 with Parent do … … 182 183 Dec(DataLength, 6); 183 184 end; 184 Request.Count := 0; 185 Request.AddListPart(List, RecDataSerializer.Position, DataLength - 10); 186 OldPos := Position; 185 if (DataLength - 10) > 0 then begin 186 Request.Count := 0; 187 ReadList(Request, 0, DataLength - 10); 188 end; 187 189 ExpectedCheckSum := 0; 188 for I := 0 to OldPos- 1 do190 for I := 0 to Position - 1 do 189 191 ExpectedCheckSum := (ExpectedCheckSum + List[I]) and $ff; 190 Position := OldPos;191 192 CheckSum := ReadByte; // byte sum from ACK to DATA 192 193 if CheckSum <> ExpectedCheckSum then Exit; … … 282 283 var 283 284 UserId: Integer; 284 RequestStream: TMemoryStreamByte; 285 ResponseStream: TMemoryStreamByte; 286 S: TStream; 287 begin 288 try 289 RequestStream := TMemoryStreamByte.Create(Request); 290 ResponseStream := TMemoryStreamByte.Create(Response); 291 //UserId := RequestStream.ReadInteger; 292 //ResponseStream.WriteInteger(UserId); 293 finally 294 RequestStream.Free; 295 ResponseStream.Free; 285 RequestSerializer: TBinarySerializer; 286 ResponseSerializer: TBinarySerializer; 287 I: Integer; 288 begin 289 try 290 RequestSerializer := TBinarySerializer.Create; 291 RequestSerializer.List := Request; 292 UserId := RequestSerializer.ReadInteger; 293 294 ResponseSerializer := TBinarySerializer.Create; 295 ResponseSerializer.List := Response; 296 with ResponseSerializer do begin 297 WriteInteger(UserId); 298 WriteByte(0); 299 WriteByte(0); 300 for I := 0 to 7 do WriteByte(0); 301 with TVirtualTerminalBF630User(Users[UserId]) do 302 for I := 1 to 15 do 303 if I < Length(FirstName) then WriteByte(Ord(FirstName[I])) 304 else WriteByte(0); 305 with TVirtualTerminalBF630User(Users[UserId]) do 306 for I := 1 to 15 do 307 if I < Length(SecondName) then WriteByte(Ord(SecondName[I])) 308 else WriteByte(0); 309 end; 310 finally 311 RequestSerializer.Free; 312 ResponseSerializer.Free; 296 313 end; 297 314 end; … … 300 317 begin 301 318 if FActive = AValue then Exit; 302 FActive := AValue;319 inherited; 303 320 CommSocket.Active := AValue; 304 321 end; … … 331 348 with TVirtualTerminalBF630User(Users.AddNew(TVirtualTerminalBF630User.Create)) do begin 332 349 Id := Users.Count; 333 Name := 'User ' + IntToStr(Id); 350 FirstName := 'User ' + IntToStr(Id); 351 SecondName := 'Second ' + IntToStr(Id); 334 352 end; 335 353 with TVirtualTerminalBF630User(Users.AddNew(TVirtualTerminalBF630User.Create)) do begin 336 354 Id := Users.Count; 337 Name := 'User ' + IntToStr(Id); 355 FirstName := 'User ' + IntToStr(Id); 356 SecondName := 'Second ' + IntToStr(Id); 338 357 end; 339 358 end; … … 352 371 destructor TVirtualTerminalBF630.Destroy; 353 372 begin 354 CommSocket.Free; 355 Users.Free; 356 Sessions.Free; 373 Active := False; 374 FreeAndNil(CommSocket); 375 FreeAndNil(Users); 376 FreeAndNil(Sessions); 357 377 inherited Destroy; 358 378 end; … … 372 392 procedure TTerminalBF630.SetActive(AValue: Boolean); 373 393 begin 374 if FActive = AValue then Exit; 394 if Active = AValue then Exit; 395 inherited; 375 396 CommSocket.Address := Address; 376 397 CommSocket.Port := Port; 377 398 CommSocket.Active := AValue; 378 FActive := AValue;379 399 end; 380 400 … … 410 430 SendDataSerializer: TBinarySerializer; 411 431 SendDataStream: TMemoryStream; 412 ResponseData: TListByte;432 // ResponseData: TListByte; 413 433 ResponseSerializer: TBinarySerializer; 414 434 CheckSum: Byte; … … 417 437 DataLength: Cardinal; 418 438 DataByte: Byte; 419 OldPos: Integer;420 439 begin 421 440 try … … 424 443 SendDataSerializer.List := SendData; 425 444 SendDataStream := TMemoryStream.Create; 426 ResponseData := TListByte.Create;445 //ResponseData := TListByte.Create; 427 446 ResponseSerializer := TBinarySerializer.Create; 428 ResponseSerializer.List := Re sponseData;447 ResponseSerializer.List := ReceiveData; 429 448 430 449 // Clear buffer … … 448 467 WriteByte(Id); // TID 449 468 WriteByte(Byte(Command)); 450 if Assigned(Request) then 469 if Assigned(Request) then begin 451 470 SendDataSerializer.WriteList(Request, 0, Request.Count); 471 end; 452 472 if UseAccessKey then begin 453 473 WriteByte(AccessKey[0]); … … 471 491 with ReceiveData, ResponseSerializer do begin 472 492 Endianness := enBig; 493 ExpectedCheckSum := 0; 473 494 WaitForBytes(8); 474 495 DataByte := ReadByte; … … 478 499 if ReadByte <> Id then raise Exception.Create('Wrong Id'); // STX 479 500 Result := ReadByte; 480 OldPos := Position;481 501 if Assigned(Response) then begin 502 WaitForBytes(DataLength - 10); 482 503 Response.Count := 0; 483 WaitForBytes(DataLength - 10); 484 485 Response.AddListPart(ReceiveData, 0, DataLength - 10); 504 Response.AddListPart(ReceiveData, Position, DataLength - 10); 505 Position := Position + (DataLength - 10); 486 506 end; 487 OldPos := Position; 488 ExpectedCheckSum := 0; 489 for I := 0 to OldPos - 1 do 507 WaitForBytes(2); 508 for I := 0 to Position - 1 do 490 509 ExpectedCheckSum := (ExpectedCheckSum + ReceiveData[I]) and $ff; 491 Position := OldPos;492 WaitForBytes(2);493 510 CheckSum := ReadByte; // byte sum from BS to DATA 494 if CheckSum <> ExpectedCheckSum then raise Exception.Create('Bad receive checksum'); 495 if ReadByte <> CodeETX then raise Exception.Create('Expected ETX'); // ETX 511 if CheckSum <> ExpectedCheckSum then 512 raise Exception.Create('Bad receive checksum'); 513 if ReadByte <> CodeETX then 514 raise Exception.Create('Expected ETX'); // ETX 496 515 end; 497 516 end; 498 517 finally 499 518 ResponseSerializer.Free; 500 ResponseData.Free;519 //ResponseData.Free; 501 520 SendDataStream.Free; 502 521 SendDataSerializer.Free; … … 531 550 end; 532 551 552 function TTerminalBF630.GetUser(Id: Integer; User: TUser): Boolean; 553 var 554 Request: TListByte; 555 RequestSerializer: TBinarySerializer; 556 Response: TListByte; 557 I: Integer; 558 Title: Integer; 559 Department: Integer; 560 begin 561 try 562 Response := TListByte.Create; 563 Request := TListByte.Create; 564 RequestSerializer := TBinarySerializer.Create; 565 RequestSerializer.List := Request; 566 RequestSerializer.WriteInteger(Id); 567 SendPacket(toUserDataGet, Request, Response); 568 if Response[0] <> Id then raise Exception.Create(SWrongId); 569 Title := Response[4]; 570 Department := Response[5]; 571 User.FirstName := ''; 572 for I := 0 to 14 do begin 573 if Response[14 + I] < 32 then Break; 574 User.FirstName := User.FirstName + Chr(Response[14 + I]); 575 end; 576 User.SecondName := ''; 577 for I := 0 to 14 do begin 578 if Response[29 + I] < 32 then Break; 579 User.SecondName := User.SecondName + Chr(Response[29 + I]); 580 end; 581 582 finally 583 Request.Free; 584 RequestSerializer.Free; 585 Response.Free; 586 end; 587 end; 588 533 589 constructor TTerminalBF630.Create; 534 590 begin 591 inherited; 535 592 ReceiveData := TListByte.Create; 536 593 ReceiveDataThread := TListByte.Create; 537 594 ReceiveDataLock := TCriticalSection.Create; 538 595 CommSocket := TCommTCPClient.Create(nil); 539 Pin := TCommPin.Create;540 596 Pin.Connect(CommSocket.Pin); 541 597 Pin.OnReceive := ReceiveDataHandler; 542 598 Timeout := 3 * OneSecond; 543 Id := 1; 599 Address := 'localhost'; 600 Port := 2000; 544 601 end; 545 602 546 603 destructor TTerminalBF630.Destroy; 547 604 begin 548 Pin.Free;549 CommSocket.Free;550 ReceiveDataLock.Free;551 ReceiveDataThread.Free;552 ReceiveData.Free;605 Active := False; 606 FreeAndNil(CommSocket); 607 FreeAndNil(ReceiveDataLock); 608 FreeAndNil(ReceiveDataThread); 609 FreeAndNil(ReceiveData); 553 610 inherited Destroy; 554 611 end; -
trunk/Packages/PinConnection/UCommTCPServer.pas
r23 r24 75 75 Mem := TMemoryStream.Create; 76 76 Stream.WriteToStream(Mem); 77 Mem.Position := 0; 77 78 Socket.SendStreamRaw(Mem); 78 79 finally -
trunk/Packages/TemplateGenerics/Additional/UBinarySerializer.pas
r12 r24 31 31 procedure WriteByte(Data: Byte); 32 32 procedure WriteWord(Data: Word); 33 procedure WriteInteger(Data: Integer); 33 34 procedure WriteCardinal(Data: Cardinal); 34 35 procedure WriteInt64(Data: Int64); … … 44 45 function ReadByte: Byte; 45 46 function ReadWord: Word; 47 function ReadInteger: Integer; 46 48 function ReadCardinal: Cardinal; 47 49 function ReadInt64: Int64; … … 169 171 Buffer: array of Byte; 170 172 begin 171 if Count > (List.Count - StartIndex) then Count := (List.Count - StartIndex); // Limit max. stream size 173 //if Count > (List.Count - StartIndex) then 174 // Count := (List.Count - StartIndex); // Limit max. stream size 175 List.Count := Count; 172 176 if Count > 0 then begin 173 177 SetLength(Buffer, Count); … … 242 246 Result := 0; 243 247 Read(Result, SizeOf(Word)); 248 if SwapData then Result := SwapEndian(Result); 249 end; 250 251 function TBinarySerializer.ReadInteger: Integer; 252 begin 253 Result := 0; 254 Read(Result, SizeOf(Integer)); 244 255 if SwapData then Result := SwapEndian(Result); 245 256 end; … … 376 387 end; 377 388 389 procedure TBinarySerializer.WriteInteger(Data: Integer); 390 begin 391 if SwapData then Data := SwapEndian(Data); 392 Write(Data, SizeOf(Integer)); 393 end; 394 378 395 end. 379 396
Note:
See TracChangeset
for help on using the changeset viewer.