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.
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/13296359.html

浙公网安备 33010602011771号