unit USimpleChat;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, SunriseChatCoreUnit, SunriseChatNetworkCoreUnit, StdCtrls;

type
  TForm2 = class(TForm)
    Memo1: TMemo;
    ListBox1: TListBox;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    SunriseChatNetworkCore1: TSunriseChatNetworkCore;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure SunriseChatNetworkCore1UserListUpdate;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2Exit(Sender: TObject);
    procedure SunriseChatNetworkCore1AddMessage(EventType: TAppEventType;
      Room: TRoom; const Args: array of TVarRec; RoomLine: TRoomLine);
    procedure ListBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    ListBox1LastItemIndex: Integer;
  end;

var
  Form2: TForm2;

implementation

uses DateUtils;

{$R *.dfm}

procedure TForm2.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  with SunriseChatNetworkCore1 do begin
    BroadcastType := btGlobal;
    LocalUser.Nick := Edit2.Text;
    //for I := 0 to NetworkInterfaces.Count-1 do
    //  Memo1.Lines.Add(TNetworkInterface(NetworkInterfaces[I]).IPAddress);
    TNetworkInterface(NetworkInterfaces[3]).Select;
    Memo1.Lines.Add('Network interface: '+ActiveNetworkInterface.IPAddress);
    Active := True;
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  with SunriseChatNetworkCore1, ListBox1, Items do
    if (ItemIndex >= 0) and (ItemIndex < Count) then
      with TUser(UserList[ListBox1.ItemIndex]) do
        SendCommand(scMessage, Edit1.Text, Id.Machine, Id.User)
          else SendCommand(scMessage, Edit1.Text);
  Edit1.Text := '';
end;

procedure TForm2.SunriseChatNetworkCore1UserListUpdate;
var
  I: Integer;
  LastItemIndex: Integer;
begin
  with SunriseChatNetworkCore1, ListBox1, Items do begin
    BeginUpdate;
    LastItemIndex := ItemIndex;
    Clear;
    for I := 0 to UserList.Count-1 do Add(TUser(UserList[I]).Nick);
    if (LastItemIndex < Count) and (LastItemIndex >= 0) then ItemIndex := LastItemIndex;
    EndUpdate;
  end;
end;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then Button1.OnClick(Self);
end;

procedure TForm2.Edit2Exit(Sender: TObject);
begin
  SunriseChatNetworkCore1.LocalUser.Nick := Edit2.Text;
  SunriseChatNetworkCore1.SendCommand(scUserInfo);
end;

procedure TForm2.SunriseChatNetworkCore1AddMessage(
  EventType: TAppEventType; Room: TRoom; const Args: array of const;
  RoomLine: TRoomLine);
begin
  Memo1.Lines.Add(RoomLine.Text);
end;

procedure TForm2.ListBox1Click(Sender: TObject);
begin
  with ListBox1, Items do begin
    if (ListBox1LastItemIndex = -1) then begin
      ListBox1LastItemIndex := ItemIndex;
      ItemIndex := -1;
    end else begin
      ListBox1LastItemIndex := -1
    end;
  end;
end;

end.
