Показать сообщение отдельно
  #2  
Старый 15.11.2015, 23:56
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А вот тут как раз классы и надо бы использовать.
Надо создавть 2 класса. Один - для "компьютера", воторой - для коммутатора. Причем второй делаем синглтоном (т.е. прячем конструктор и наружу показываем функцию, которая просто возвращает ссылку на нужный нам объект). А далее зависит от степени правдоподобности модели.

Код:
type
  TNetPacket = record
    // Здесть твоя структура пакета
  end;

  TRouter = class; // forward declaration

  TComputer=class
  private
    FMAC : String;
   FRouter : TRouter
  public
    constructor Create(AMAC : String);
    procedure recv(Data : TNetPacket);
    procedure send(Data  : TNetPacket);

    property MAC : String read FMAC;
  end;

  TRouter = class
  private
    FClients : TStringList;
    function GetCount : Integer;
    function GetClient(Index : Integer) : String;
  protected
    constructor Create; virtual;
  public
    procedure recv(Data : TNetPacket);
    procedure send(Data  : TNetPacket);

    property Clients[Index : Integer] : String read GetClient;
    property Count : Integer read GetCount;
  end;
...

function GetRouter : TRouter;

implementation

var
  _Router : TRouter;

function GetRouter : TRouter;
begin
  If Not Assigned(_Router) Then _Router := TRouter.Create;
  Result := _Router;
...

initialization
  _Router := Nil;

finallization
  If Assigned(_Router) Then _Router.Free;

end.

Ну там еще можно разные эвенты навешать, что бы логировать происходящее...
Смысл примерно такой. При создании "компьютер" регистрируется у роутера (тот запоминает его MAC и ссылку на объект). Далее если надо что-то отправить, то клиент вызывает либо свой метод send, который вызовет метод recv роутера, либо напрямую "дергать" роутер. Роутер, получив пакет и найдя получателя по MAC-адресу, вызовер соотв. метод recv этого клиента.
Ответить с цитированием