Автор работы: Пользователь скрыл имя, 17 Декабря 2011 в 13:04, курсовая работа
В данном курсовом проекте разработана программа-аналог системы p2p. Данная программа создана в среде Delphi версии 7.0. Программа представляет собой комплекс средств для обмена файлами между пользователями в сети, включающий в себя хаб, клиентское приложение, поиск нужных файлов, предоставление доступа к информации, чат между пользователями. Наряду с этим, в программе реализованы права доступа на действия с файлами пользователей.
Введение 5
1. Анализ технического задания 7
2. Реализация 13
3. Тестирование 13
Заключение 18
Список литературы 19
end;
Result := S[i] + Result;
dec(i);
dec(j);
end;
end;
function Make64(aLo, aHi: Integer): Int64;
begin
Result := aHi;
Result := Result shl 32;
Result := Result + Cardinal(aLo);
end;
function FileTimeToDateTime(FileTime: TFileTime): TDateTime;
var
ModifiedTime: TFileTime;
SystemTime: TSystemTime;
begin
Result := 0;
if (FileTime.dwLowDateTime = 0) and (FileTime.dwHighDateTime = 0) then Exit;
try
FileTimeToLocalFileTime(
FileTimeToSystemTime(
Result := SystemTimeToDateTime(
except
Result := Now;
end;
end;
function FileTimeToText(aFileTime: TFileTime): String;
begin
Result := '';
if (aFileTime.dwLowDateTime = 0) and (aFileTime.dwHighDateTime = 0) then Exit;
try
Result := DateTimeToStr(
except
Result := '';
end;
end;
procedure TfMain.LogMsg(aText: String);
begin
mmLog.Lines.Add(TimeToStr(Now) + ': ' + aText);
end;
function TfMain.SelectPeer(aHandle: Integer): Boolean;
begin
Result := False;
try
SelPeer := TPeer(P2pAgent.GetMoniker(
if SelPeer = nil then Exit;
Result := True;
except
end;
end;
procedure TfMain.FormCreate(Sender: TObject);
begin
LoadForm;
MyPeers := TObjectList.Create;
P2pAgent := TP2PAgent.Create(Self);
P2pAgent.OnSessionOpen := GoSessionOpen;
P2pAgent.OnSessionClosed := GoSessionClosed;
P2pAgent.OnSessionRejected := GoSessionRejected;
P2pAgent.OnPeerConnected := GoPeerConnected;
P2pAgent.OnPeerDisconnected := GoPeerDisconnected;
P2pAgent.OnAlertMessage := GoAlertMessage;
P2pAgent.OnChatMessage := GoChatMessage;
P2pAgent.OnBinaryMessage := GoBinaryMessage;
P2pAgent.OnNeedListFolder := GoNeedFileList;
P2pAgent.OnHaveListItem := GoHaveListItem;
P2pAgent.OnListFolderDone := GoListDone;
P2pAgent.OnNeedCreateFolder := GoNeedCreateFolder;
P2pAgent.OnCreateFolderDone := GoCreateFolderDone;
P2pAgent.OnNeedDeleteFolder := GoNeedDeleteFolder;
P2pAgent.OnDeleteFolderDone := GoDeleteFolderDone;
P2pAgent.OnNeedDeleteFile := GoNeedDeleteFile;
P2pAgent.OnDeleteFileDone := GoDeleteFileDone;
P2pAgent.OnNeedRenameFolder := GoNeedRenameFolder;
P2pAgent.OnRenameFolderDone := GoRenameFolderDone;
P2pAgent.OnNeedRenameFile := GoNeedRenameFile;
P2pAgent.OnRenameFileDone := GoRenameFileDone;
P2pAgent.OnNeedDownload := GoNeedDownload;
P2pAgent.OnDownloadProgress := GoDownloadClientProgress;
P2pAgent.OnClientDownloadDone := GoDownloadClientDone;
P2pAgent.OnServerDownloadDone := GoDownloadServerDone;
P2pAgent.OnNeedUpload := GoNeedUpload;
P2pAgent.OnUploadProgress := GoUploadClientProgress;
P2pAgent.OnClientUploadDone := GoClientUploadDone;
P2pAgent.OnServerUploadDone := GoServerUploadDone;
P2pAgent.OnNeedZip := GoNeedZip;
P2pAgent.OnZipProgress := GoZipProgress;
P2pAgent.OnClientZipDone := GoClientZipDone;
P2pAgent.OnServerZipDone := GoServerZipDone;
P2pAgent.OnNeedUnzip := GoNeedUnzip;
P2pAgent.OnServerUnzipDone := GoServerUnzipDone;
P2pAgent.OnUnzipProgress := GoUnzipProgress;
P2pAgent.OnClientUnzipDone := GoClientUnzipDone;
P2pAgent.OnNeedSearch := GoNeedSearch;
P2pAgent.OnServerSearchDone := GoServerSearchDone;
P2pAgent.OnHaveFindFile := GoHaveFindFile;
P2pAgent.OnSearchProgress := GoSearchProgress;
P2pAgent.OnClientSearchDone := GoClientSearchDone;
UpdateStatus;
end;
procedure TfMain.FormDestroy(Sender: TObject);
begin
FreeAndNil(P2pAgent);
SaveForm;
MyPeers.Free;
end;
procedure TfMain.FormShow(Sender: TObject);
begin
SetSettings;
end;
procedure TfMain.LoadForm;
var
Ini: TIniFile;
begin
try
Ini := TIniFile.Create(ConfFile);
except
Ini := nil;
end;
if Ini = nil then Exit;
try
with Ini do
begin
Left := ReadInteger('Last', 'Left', Left);
Top := ReadInteger('Last', 'Top', Top);
end;
finally
Ini.Free;
end;
if Left < 0 then Left := 0;
if Top < 0 then Top := 0;
end;
procedure TfMain.SaveForm;
var
Ini: TIniFile;
begin
try
Ini := TIniFile.Create(ConfFile);
except
Ini := nil;
end;
if Ini = nil then Exit;
try
with Ini do
begin
WriteInteger('Last', 'Left', Left);
WriteInteger('Last', 'Top', Top);
end;
finally
Ini.Free;
end;
end;
procedure TfMain.SetSettings;
begin
P2pAgent.SecurityMode := fSettings.SecurityMode;
P2pAgent.BindAddress := fSettings.edAddr.Text;
P2pAgent.SocksServer
:= Trim(fSettings.edSocksServer.
P2pAgent.SocksPort
:= StrToIntDef(fSettings.
P2pAgent.SocksUsername
:= Trim(fSettings.edSocksUser.
P2pAgent.SocksPassword
:= Trim(fSettings.edSocksPass.
if fSettings.radSocks5.Checked then
P2pAgent.SocksVersion := 5
else
P2pAgent.SocksVersion := 4;
UpdateStatus;
end;
procedure TfMain.CheckError(aCode: Integer);
begin
if aCode = 0 then Exit;
MessageBox(Handle,
PChar(bsErrorDescription(
end;
procedure TfMain.UpdateStatus;
begin
StatusBar.Panels[1].Text := '';
StatusBar.Panels[2].Text := '';
case P2pAgent.GetSessionStatus of
SESSION_STATUS_CONNECTED:
begin
btnConnect.Enabled := False;
btnCancel.Enabled := False;
btnDisconnect.Enabled := True;
StatusBar.Panels[0].Text := ' Сессия открыта - ' + IntToStr(lvPeers.Items.Count) + ' пользователи';
StatusBar.Panels[1].Text := ' Хаб: ' + P2pAgent.HubAddress + ':' + IntToStr(P2pAgent.HubPort);
if P2pAgent.Username > '' then
StatusBar.Panels[2].Text := ' Пользователь: ' + P2pAgent.Username
else
StatusBar.Panels[2].Text := ' Пользователь: не вошли в систему';
end;
SESSION_STATUS_CONNECTING:
begin
btnConnect.Enabled := False;
btnCancel.Enabled := True;
btnDisconnect.Enabled := False;
StatusBar.Panels[0].Text := ' Соединение с хабом';
end;
else
begin
btnConnect.Enabled := True;
btnCancel.Enabled := False;
btnDisconnect.Enabled := False;
StatusBar.Panels[0].Text := ' сессия закрыта';
end;
end;
UpdateButtons;
end;
procedure TfMain.UpdateButtons;
begin
btnAlert.Enabled := lvPeers.Selected <> nil;
btnChat.Enabled := lvPeers.Selected <> nil;
btnFiles.Enabled := lvPeers.Selected <> nil;
btnSearch.Enabled := lvPeers.Selected <> nil;
btnRemove.Enabled := lvPeers.Selected <> nil;
btnBytes.Enabled := (lvPeers.Selected <> nil) or (P2pAgent.GetSessionStatus = SESSION_STATUS_CONNECTED);
end;
procedure TfMain.lvPeersChange(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin
if P2pAgent = nil then Exit;
if Change <> ctState then Exit;
UpdateButtons;
end;
procedure TfMain.DeletePeer(aPeer: TPeer);
begin
if aPeer = nil then Exit;
lvPeers.Items.Delete(aPeer.
aPeer.fChat.Free;
aPeer.fFiles.Free;
aPeer.fSearch.Free;
MyPeers.Remove(aPeer);
end;
procedure TfMain.GoSessionOpen(Sender: TObject);
begin
UpdateStatus;
LogMsg('Соединение с хабом ' + P2pAgent.HubAddress + ':' + IntToStr(P2pAgent.HubPort));
end;
procedure TfMain.GoSessionClosed(Sender: TObject);
begin
UpdateStatus;
LogMsg('Отключен от хаба');
end;
procedure TfMain.GoSessionRejected(