source: branches/web2/UMainForm.pas

Last change on this file was 1, checked in by george, 16 years ago

Prvotní import všeho

  • Property svn:executable set to *
File size: 5.8 KB
Line 
1program UMainForm;
2
3{$mode delphi}
4
5uses
6 {$IFDEF UNIX}{$IFDEF UseCThreads}
7 cthreads,
8 {$ENDIF}{$ENDIF}
9 SysUtils, Classes, UHtmlClasses, UXmlClasses, IdContext, IdSocketHandle,
10 IdBaseComponent, IdComponent, IdTCPServer, IdCustomHTTPServer, IdHTTPServer,
11 USqlDatabase, DateUtils;
12
13type
14 TUser = class
15 public
16 Database: TSqlDatabase;
17 SessionId: string;
18 Name: string;
19 Password: string;
20 Email: string;
21 FullName: string;
22 LastLogin: TDateTime;
23 function Login(UserName, Password: string): Boolean;
24 end;
25
26 TUserOnline = class
27 public
28 User: TUser;
29 IpAddress: string;
30 Time: TDateTime;
31 SessionId: string;
32 end;
33
34 TMainForm = class
35 IdHTTPServer1: TIdHTTPServer;
36 constructor Create;
37 procedure IdHTTPServer1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
38 procedure IdHTTPServer1SessionStart(Sender: TIdHTTPSession);
39 procedure IdHTTPServer1SessionEnd(Sender: TIdHTTPSession);
40 destructor Destroy; override;
41 private
42 { Private declarations }
43 public
44 Database: TSqlDatabase;
45 UserSessions: TList; // of TUser;
46 HtmlPage: THtmlPage;
47 Page: THtmlPage;
48 end;
49
50var
51 MainForm: TMainForm;
52
53constructor TMainForm.Create;
54var
55 SocketHandle : TIdSocketHandle;
56begin
57 Database := TSqlDatabase.Create;
58 with Database do begin
59 Hostname := 'localhost';
60 UserName := 'root';
61 Password := '';
62 Database := 'wow';
63 Connect;
64 end;
65 UserSessions := TList.Create;
66
67 (*
68 HtmlPage := THtmlPage.Create;
69 with HtmlPage do begin
70 Title := 'Centrála - Rozcestník';
71 Charset := 'windows-1250';
72 with Body, THtmlLink(SubItems[SubItems.Add(THtmlLink.Create)]) do begin
73 Target.AsString := 'http://user:pass@www.zdechov.net:80/folder/index.html?param1=value1&param2=value2#Fragment';
74 Content := THtmlString.Create;
75 THtmlString(Content).Text := 'Odkaz';
76 end;
77 with Body, THtmlImage(SubItems[SubItems.Add(THtmlImage.Create)]) do begin
78 AlternateText := 'Peníze';
79 Source.AsString := 'images/favicons/money.gif';
80 Size.Width := 16;
81 Size.Height := 16;
82 end;
83 end;
84 *)
85(*
86 Page := THtmlPage.Create;
87 with Page do begin
88 Title := 'ZdìchovNET - Úvodní stránka';
89 with Body do begin
90 with TDiv(SubItems[SubItems.Add(TDiv.Create)]) do begin
91
92 end;
93 end;
94
95 end;
96 Memo1.Lines.Text := Page.GenerateOutput;
97 *)
98 //Memo1.Lines.Text := HtmlPage.AsXmlDocument.AsString;
99// Xmldocument.Free;
100
101 IdHTTPServer1 := TIdHTTPServer.Create;
102 with IdHTTPServer1 do begin
103 SocketHandle := Bindings.Add;
104 with SocketHandle do begin
105 IP := '0.0.0.0';
106 Port := 8000;
107 end;
108 DefaultPort := 25000;
109 AutoStartSession := True;
110 ServerSoftware := 'Chronosoft web server';
111 SessionTimeOut := 600000;
112 OnSessionStart := IdHTTPServer1SessionStart;
113 OnSessionEnd := IdHTTPServer1SessionEnd;
114 OnCommandGet := IdHTTPServer1CommandGet;
115 SessionState := True;
116 Active := True;
117 end;
118end;
119
120destructor TMainForm.Destroy;
121begin
122 IdHTTPServer1.Free;
123end;
124
125procedure TMainForm.IdHTTPServer1CommandGet(AContext: TIdContext;
126 ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
127var
128 PathParts: TStringArray;
129 QueryParts: TStringArray;
130 Output: string;
131 User: TUser;
132 I: Integer;
133begin
134 I := 0;
135 while (I < UserSessions.Count) and (TUser(UserSessions[I]).SessionId <> ARequestInfo.Session.SessionID) do Inc(I);
136 if (I < UserSessions.Count) then User := TUser(UserSessions[I]) else begin
137 User := TUser.Create;
138 User.Database := Database;
139 end;
140 PathParts := Explode('/', Copy(ARequestInfo.Document, 2, High(Integer)));
141 if PathParts[0] = 'user' then begin
142 if PathParts[1] = 'login2' then
143 //AResponseInfo.ContentText := '<div class="sysmessage">' +
144 //User.Login(ARequestInfo.Params.Values['nick'], ARequestInfo.Params.Values['password']);
145 //+ '</div>';
146 if Assigned(ARequestInfo.Session) then
147 AResponseInfo.ContentText := ARequestInfo.Session.SessionID;
148 if Assigned(AResponseInfo.Session) then
149 AResponseInfo.ContentText := AResponseInfo.ContentText + ' X' + AResponseInfo.Session.SessionID;
150// AResponseInfo.ContentText := IntToStr(IdHTTPServer1.SessionList
151 end else begin
152 AResponseInfo.ContentText := '<div class="Title">Pøihlá‘ení uživatele:</div>' +
153 '<div class="Form"><form action="/user/login2/" method="post">' +
154 '<table><tr><td>Pøezdívka:</td><td><input name="nick"></td></tr>' +
155 '<tr><td>Heslo:</td><td><input type="password" name="password"></td></tr>' +
156 '</table><input type="submit" value="Pøihlásit"><br>' +
157 '</form>' +
158 '<a href="?module=user&amp;action=sendpassword">Zaslat heslo na email</a></div>';
159 end;
160 //AResponseInfo.ContentText := HtmlPage.AsXmlDocument.AsString
161 User.Free;
162end;
163
164{ TUser }
165
166function TUser.Login(UserName, Password: string): Boolean;
167var
168 Rows: TDbRows;
169begin
170 Rows := Database.Select('user', '*', 'username="' + UserName + '"');
171 if Rows.Count > 0 then begin
172 if Rows[0].Values['password'] = Password then begin
173 Result := True;
174 LastLogin := Now;
175
176 //Database.Update(
177 end;
178 end;
179
180end;
181
182procedure TMainForm.IdHTTPServer1SessionStart(Sender: TIdHTTPSession);
183begin
184 with TUser(UserSessions[UserSessions.Add(TUser.Create)]) do begin
185 Database := Self.Database;
186 SessionId := Sender.SessionID;
187 end;
188end;
189
190procedure TMainForm.IdHTTPServer1SessionEnd(Sender: TIdHTTPSession);
191var
192 I: Integer;
193begin
194 I := 0;
195 while (I < UserSessions.Count) and (TUser(UserSessions[I]).SessionId <> Sender.SessionID) do Inc(I);
196 if (I < UserSessions.Count) then
197 TUser(UserSessions[I]).Free;
198end;
199
200begin
201 MainForm := TMainForm.Create;
202 ReadLn;
203end.
Note: See TracBrowser for help on using the repository browser.