델파이로 인터넷프로그램을 공부하고있는 인규입니다.
먼저 많은 고수님들의 성심어린 답변에 감사드리며 질문올리겠습니다.
현재 채팅프로그램을 구현중입니다.
현재까지 책을보고 꾸역꾸역 게시판과 방명록,카운터는 완성했는데 채팅구현이 쉽지않습니다.
책과 똑같이 하지는 않고 필요한 기능들을 추가하려다 프로그램이 엮여버려 소스로 구현하려했으나 그 소스마저 구현이 되지 않습니다.
아래는 소스입니다. 소스에서 다른 함수나 프로시져는 다른 프로그램에서 제대로 구현되던 부분입니다. 다만 추가된 부분은 AppendFile과 LoadFromFileLast라는 함수인데 에러는 나지 않는데 전혀 구현이 되지 않더군요. 이 두함수를 빼고 돌리면 잘 돌아갑니다. 참고로 저는 델파이3을 쓰고있는데 델3에서 구현되지 않는건지요. 벌써 5일쨉니다.
unit u_chat;
interface
uses
Windows, Messages, SysUtils, Classes, HTTPApp;
type
Twm = class(TWebModule)
procedure wmwaViewAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
procedure wmwaSendAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
procedure wmwaIntroAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
procedure wmwaStartAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
wm: Twm;
implementation
uses homelib;
{$R *.DFM}
procedure AppendFile(fil, str : string);
var
list : TStringList;
begin
try
list := TStringList.create;
if FileExists(fil) then list.LoadFromFile(fil);
list.add(str);
list.SaveToFile(fil);
list.free;
except
Exit;
end;
end;
function LoadFromFileLast(fil : string; cnt : integer) : string;
var
list : TStringList;
i : integer;
str : string;
begin
list := TStringList.create;
list.loadfromfile(fil);
if list.count > 10 then
for i := list.count - 10 + 1 to list.count do
begin
str := list[i-1];
result := result + str + #13#10
end
else
result := list.Text;
end;
procedure Twm.wmwaViewAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
var
str, PName, PRoom, RoomText : string;
begin
str := LoadFromFile(HomePageRoot + 'chat.html');
PName := Request.CookieFields.Values['name'];
PRoom := Request.CookieFields.Values['room'];
try
RoomText := LoadFromFileLast(HomePageRoot + PRoom + '.txt', 10);
except
RoomText := '내용이 없습니다.';
end;
replace(RoomText, #13#10, '
');
replace(str, '@chat', RoomText);
response.Content := str;
end;
procedure Twm.wmwaSendAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
var
str, PName, PRoom, send : string;
begin
PName := Request.CookieFields.Values['name'];
PRoom := Request.CookieFields.Values['room'];
send := Request.QueryFields.Values['edText'];
str := LoadFromFile(HomePageRoot + 'chat_send.html');
AppendFile(HomePageRoot + PRoom + '.txt', PName + ' : ' + send);
response.Content := str;
end;
procedure Twm.wmwaIntroAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
var
str, PName, PRoom : string;
begin
PName := Request.CookieFields.Values['name'];
PRoom := Request.CookieFields.Values['room'];
str := LoadFromFile(HomePageRoot + 'chat.html');
replace(str, '@chat', PName + '님이 들어 오셨습니다.');
AppendFile(HomePageRoot + PRoom + '.txt', PName + '님이 들어 오셨습니다.');
response.Content := str;
end;
procedure Twm.wmwaStartAction(Sender: TObject; Request: TWebRequest;
Response: TWebResponse; var Handled: Boolean);
var
str, PName, PRoom : string;
begin
PName := Request.QueryFields.Values['edName'];
PRoom := Request.QueryFields.Values['edRoom'];
str := LoadFromFile(HomePageRoot + 'chat_frame.html');
response.Cookies.Add;
response.Cookies.Items[0].name := 'name';
response.Cookies.Items[0].value := PName;
response.Cookies.Add;
response.Cookies.Items[1].name := 'room';
response.Cookies.Items[1].value := PRoom;
response.Content := str;
end;
end.