⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interservermsg.pas

📁 FIR引擎最新源码+注册
💻 PAS
字号:
unit InterServerMsg;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JSocket, ObjBase;

type
  TServerMsgInfo = record
    Socket: TCustomWinSocket;
    s2E0: string;
  end;
  pTServerMsgInfo = ^TServerMsgInfo;
  TFrmSrvMsg = class(TForm)
    MsgServer: TServerSocket;
    procedure MsgServerClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure MsgServerClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure MsgServerClientError(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
    procedure MsgServerClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    PlayObject: TPlayObject;
    SrvArray: array[0..9] of TServerMsgInfo;
    procedure DecodeSocStr;
    procedure MsgGetUserServerChange;
    procedure SendSocket(Socket: TCustomWinSocket; sMsg: string);
    { Private declarations }
  public
    constructor Create();
    destructor Destroy; override;
    procedure SendSocketMsg(sMsg: string);
    procedure StartMsgServer();
    procedure Run();
    { Public declarations }
  end;

var
  FrmSrvMsg: TFrmSrvMsg;

implementation

uses M2Share, Grobal2;

{$R *.dfm}

{ TFrmSrvMsg }

procedure TFrmSrvMsg.Run;
begin
{$IF (DEBUG = 0) and (SoftVersion <> VERDEMO)}
  if IsDebuggerPresent then
    Application.Terminate;
{$IFEND}
end;

procedure TFrmSrvMsg.StartMsgServer;
resourcestring
  sExceptionMsg = '[Exception] TFrmSrvMsg::StartMsgServer';
begin
  try
    MsgServer.Active := False;
    MsgServer.Address := g_Config.sMsgSrvAddr;
    MsgServer.Port := g_Config.nMsgSrvPort;
    MsgServer.Active := True;
  except
    on E: Exception do begin
      MainOutMessage(sExceptionMsg);
      MainOutMessage(E.Message);
    end;
  end;
end;

procedure TFrmSrvMsg.DecodeSocStr;
var
  sData, SC, s10, s14, s18: string;
  n1C, n20: Integer;
resourcestring
  sExceptionMsg = '[Exception] TFrmSrvMsg::DecodeSocStr';
begin
 { try
    if Pos(')', sRecvMsg) <= 0 then exit;
    sData := sRecvMsg;
    sRecvMsg := '';
    while (True) do begin
      sData := ArrestStringEx(sData, '(', ')', SC);
      if SC = '' then break;
      s14 := GetValidStr3(SC, s10, ['/']);
      s14 := GetValidStr3(s14, s18, ['/']);
      n1C := Str_ToInt(s10, 0);
      n20 := Str_ToInt(DeCodeString(s18), -1);
      case n1C of //
        SS_200: ;
        SS_201: ;
        SS_202: ;
        SS_WHISPER: ;
        SS_204: ;
        SS_205: ;
        SS_206: ;
        SS_207: ;
        SS_208: ;
        SS_209: ;
        SS_210: ;
        SS_211: ;
        SS_212: ;
        SS_213: ;
        SS_214: ;
      end;
      if Pos(')', sData) <= 0 then break;
    end;
  except
    MainOutMessage(sExceptionMsg);
  end;}
end;

procedure TFrmSrvMsg.MsgGetUserServerChange;
begin

end;

procedure TFrmSrvMsg.SendSocket(Socket: TCustomWinSocket; sMsg: string);
begin
  if Socket.Connected then
    Socket.SendText('(' + sMsg + ')');
end;

procedure TFrmSrvMsg.SendSocketMsg(sMsg: string);
var
  I: Integer;
  ServerMsgInfo: pTServerMsgInfo;
begin
  for I := Low(SrvArray) to High(SrvArray) do begin
    ServerMsgInfo := @SrvArray[I];
    if ServerMsgInfo.Socket <> nil then
      SendSocket(ServerMsgInfo.Socket, sMsg);
  end;
end;

constructor TFrmSrvMsg.Create;
begin
  FillChar(SrvArray, SizeOf(SrvArray), 0);
  PlayObject := TPlayObject.Create;
end;

destructor TFrmSrvMsg.Destroy;
begin
  PlayObject.Free;
  inherited;
end;

procedure TFrmSrvMsg.MsgServerClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  I: Integer;
  ServerMsgInfo: pTServerMsgInfo;
begin
  for I := Low(SrvArray) to High(SrvArray) do begin
    ServerMsgInfo := @SrvArray[I];
    if ServerMsgInfo.Socket = nil then begin
      ServerMsgInfo.Socket := Socket;
      ServerMsgInfo.s2E0 := '';
      Socket.nIndex := I;
    end;
  end;
end;

procedure TFrmSrvMsg.MsgServerClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
  I: Integer;
  ServerMsgInfo: pTServerMsgInfo;
begin
  for I := Low(SrvArray) to High(SrvArray) do begin
    ServerMsgInfo := @SrvArray[I];
    if ServerMsgInfo.Socket = Socket then begin
      ServerMsgInfo.Socket := nil;
      ServerMsgInfo.s2E0 := '';
    end;
  end;
end;

procedure TFrmSrvMsg.MsgServerClientError(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
  Socket.Close;
  ErrorCode := 0;
end;

procedure TFrmSrvMsg.MsgServerClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  nC: Integer;
begin
  nC := Socket.nIndex;
  if (nC <= High(SrvArray)) and (SrvArray[nC].Socket = Socket) then begin
    SrvArray[nC].s2E0 := SrvArray[nC].s2E0 + Socket.ReceiveText;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -