• SOCKET缓存


    SOCKET缓存

    /// <author>cxg 2020-7-13</author>
    /// socket缓存(线程安全)
    
    unit sockBuf;
    
    interface
    
    uses
      System.SyncObjs, Net.SocketAPI, Net.CrossSocket.Base, Net.CrossSocket,
      System.Generics.Collections, System.Classes, System.SysUtils;
    
    const
      bufsize = 32768; //32K
    
    type
      TSockBuf = class
      private
        bufs: TDictionary<ICrossConnection, TMemoryStream>; 
        fCS: TCriticalSection;
      public
        constructor Create;
        destructor Destroy; override;
        function process(const Connection: ICrossConnection; const Buf: Pointer; const Len: Integer): TMemoryStream;
        procedure remove(const Connection: ICrossConnection);
      end;
    
    implementation
    
    { TSockBuf }
    
    constructor TSockBuf.Create;
    begin
      bufs := TDictionary<ICrossConnection, TMemoryStream>.Create;
      fCS := TCriticalSection.Create;
    end;
    
    destructor TSockBuf.Destroy;
    begin
      for var v: TMemoryStream in bufs.Values do
        v.Free;
      FreeAndNil(bufs);
      FreeAndNil(fCS);
      inherited;
    end;
    
    function TSockBuf.process(const Connection: ICrossConnection; const Buf: Pointer; const Len: Integer): TMemoryStream;
    begin
      fCS.Enter;
      if not bufs.ContainsKey(Connection) then  
      begin
        Result := TMemoryStream.Create;
        bufs.Add(Connection, Result);
      end
      else     
        bufs.TryGetValue(Connection, Result);
      fCS.Leave;
      Result.Write(Buf^, Len);
    end;
    
    procedure TSockBuf.remove(const Connection: ICrossConnection);
    begin
      fCS.Enter;
      bufs[Connection].Free;
      bufs.Remove(Connection);
      fCS.Leave;
    end;
    
    end.
    

      

  • 相关阅读:
    VSCode 配置 Python 开发环境
    出现:Microsoft Visual C++ 14.0 is required 的解决方案
    python3 pathlib库中的Path类的使用
    使用 AI 绘制箭头
    Adobe Illustrator 入门 新建 保存图片
    jinja2
    Java 读取和写入文本文件
    Affy包 estrogen包
    GEOquery
    apply() 函数家族介绍
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/13296359.html
Copyright © 2020-2023  润新知