Q&A

  • 채팅프로그램
델파이로 인터넷프로그램을 공부하고있는 인규입니다.



먼저 많은 고수님들의 성심어린 답변에 감사드리며 질문올리겠습니다.



현재 채팅프로그램을 구현중입니다.



현재까지 책을보고 꾸역꾸역 게시판과 방명록,카운터는 완성했는데 채팅구현이 쉽지않습니다.



책과 똑같이 하지는 않고 필요한 기능들을 추가하려다 프로그램이 엮여버려 소스로 구현하려했으나 그 소스마저 구현이 되지 않습니다.



아래는 소스입니다. 소스에서 다른 함수나 프로시져는 다른 프로그램에서 제대로 구현되던 부분입니다. 다만 추가된 부분은 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.









0  COMMENTS