UploadHandle.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using PLC.Siemens.Protocol.Common;
  3. using PLC.Siemens.Protocol.Upload;
  4. using ByteBuffer = Core.Communication.Transport.ByteBuffer;
  5. using PLC.Siemens.O;
  6. namespace PLC.Siemens.ProtocolHandle
  7. {
  8. public class UploadHandle:IPacketHandle
  9. {
  10. public UploadRequest Request { get; set; }
  11. public UploadResponse Response { get; set; }
  12. public byte UploadID { get; set; }
  13. public ResultCode ResultCode { get; set; }
  14. public UploadHandle()
  15. {
  16. Request = new UploadRequest();
  17. }
  18. public void Handle(IIsoSender sender)
  19. {
  20. Request.UploadID = UploadID;
  21. Response = sender.IsoSend<UploadRequest, UploadResponse>(Request);
  22. ResultCode = Response.Header.Error;
  23. bool done = Response.Params.EoU == 0;
  24. ByteBuffer byteBuffer = ByteBuffer.Allocate();
  25. byteBuffer.Push(Response.Data.Datas);
  26. while (!done && ResultCode == ResultCode.OK)
  27. {
  28. Response = sender.IsoSend<UploadRequest, UploadResponse>(Request);
  29. ResultCode = Response.Header.Error;
  30. byteBuffer.Push(Response.Data.Datas);
  31. done = Response.Params.EoU == 0;
  32. }
  33. Request.UploadID = UploadID;
  34. Request.PduType = PduType.PduEndUpload;
  35. Response = sender.IsoSend<UploadRequest, UploadResponse>(Request);
  36. ResultCode = Response.Header.Error;
  37. done = Response.Params.EoU == 0;
  38. }
  39. }
  40. }