Разработка аналога системы p2p

Автор работы: Пользователь скрыл имя, 17 Декабря 2011 в 13:04, курсовая работа

Описание работы

В данном курсовом проекте разработана программа-аналог системы p2p. Данная программа создана в среде Delphi версии 7.0. Программа представляет собой комплекс средств для обмена файлами между пользователями в сети, включающий в себя хаб, клиентское приложение, поиск нужных файлов, предоставление доступа к информации, чат между пользователями. Наряду с этим, в программе реализованы права доступа на действия с файлами пользователей.

Содержание работы

Введение 5
1. Анализ технического задания 7
2. Реализация 13
3. Тестирование 13
Заключение 18
Список литературы 19

Файлы: 1 файл

Пояснительная записка.doc

— 596.50 Кб (Скачать файл)

begin

  LogMsg('Не могу соедениться с' + fConnect.edHost.Text + ':' + fConnect.edPort.Text + '   Ошибка- ' + bsErrorDescription(aCode));

  if not btnAutoTest.Down then

    ShowMessage('Не могу соединиться!'#13#13'Ошибка: ' + bsErrorDescription(aCode));

  UpdateStatus;

end;

procedure TfMain.GoPeerConnected(Sender: TObject; aHandle: Integer);

var

  Pe: TPeer;

begin

  Pe := TPeer.Create;

  MyPeers.Add(Pe);

  P2pAgent.SetMoniker(aHandle, Integer(Pe));

  Pe.Handle := aHandle;

  Pe.Username := P2pAgent.GetPeerName(aHandle);

  P2pAgent.SetIncomingBandwidth(StrToIntDef(fSettings.edIncomingBandwidth.Text, 0));

  P2pAgent.SetOutgoingBandwidth(StrToIntDef(fSettings.edOutgoingBandwidth.Text, 0));

  Application.CreateForm(TfChat, Pe.fChat);

  TfChat(Pe.fChat).Peer := Pe;

  Pe.fChat.Caption := 'чат с ' + Pe.Username;

  Application.CreateForm(TfFiles, Pe.fFiles);

  TfFiles(Pe.fFiles).Peer := Pe;

  Pe.fFiles.Caption := Pe.Username + '''расшаренные файлы';

  Application.CreateForm(TfSearch, Pe.fSearch);

  TfSearch(Pe.fSearch).Peer := Pe;

  Pe.fSearch.Caption := 'Поиск в ' + Pe.Username + '''файлах';

  Pe.ListItem := lvPeers.Items.Add;

  Pe.ListItem.Data := Pointer(Pe);

  Pe.ListItem.Caption := CheckName(Pe.Username);

  Pe.ListItem.Subitems.Add(TimeToStr(Now));

  Pe.ListItem.Subitems.Add('Connected');

  if lvPeers.Items.Count = 1 then

    lvPeers.Items[0].Selected := True;

  UpdateButtons;

  UpdateStatus;

  LogMsg('New peer at ' + Pe.ListItem.SubItems[0] + ':' + Pe.ListItem.SubItems[1]);

  if not btnAutoTest.Down then Exit;

  P2pAgent.SendChatMessage(aHandle, 'тест ' + IntToStr(GetTickCount));

end;

procedure TfMain.GoPeerDisconnected(Sender: TObject; aHandle: Integer);

var

  Pr: TPeer;

begin

  Pr := TPeer(P2pAgent.GetMoniker(aHandle));

  if Pr = nil then Exit;

  LogMsg('удалить пользователя ' + Pr.ListItem.Caption);

  DeletePeer(Pr);

end;

procedure TfMain.btnFilesClick(Sender: TObject);

begin

  ShowForm(TPeer(lvPeers.Selected.Data).fFiles);

end;

procedure TfMain.GoNeedFileList(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arList);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': папка ' + PreSlash(aPath));

end;

procedure TfMain.GoHaveListItem(Sender: TObject; aHandle: Integer; const aName: WideString; aFolder: WordBool; aSizeLo, aSizeHi, aTimeLo, aTimeHi: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).HaveFileItem(aName, aFolder, aSizeLo, aSizeHi, aTimeLo, aTimeHi);

end;

procedure TfMain.GoListDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).ListDone(aCode);

end;

procedure TfMain.GoNeedCreateFolder(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arCreateFolder);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': папка ' + PreSlash(aPath));

end;

procedure TfMain.GoCreateFolderDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).CreateFolderDone(aCode);

end;

procedure TfMain.GoNeedRenameFolder(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arRenameFolder);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': переименовать папку ' + PreSlash(aPath));

end;

procedure TfMain.GoRenameFolderDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).RenameFolderDone(aCode);

end;

procedure TfMain.GoNeedRenameFile(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arRenameFile);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': переименовать файл ' + PreSlash(aPath));

end;

procedure TfMain.GoRenameFileDone(Sender: TObject;  aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).RenameFileDone(aCode);

end;

procedure TfMain.GoNeedDeleteFolder(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arDeleteFolder);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': удалить папку ' + PreSlash(aPath));

end;

procedure TfMain.GoDeleteFolderDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).DeleteFolderDone(aCode);

end;

procedure TfMain.GoNeedDeleteFile(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arDeleteFile);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': удалить файл ' + PreSlash(aPath));

end;

procedure TfMain.GoDeleteFileDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).DeleteFileDone(aCode);

end;

procedure TfMain.GoNeedDownload(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arDownload);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': начало загрузки ' + PreSlash(aPath));

end;

procedure TfMain.GoDownloadServerDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  LogMsg(CheckName(SelPeer.Username) + ': окончание скачивания - ' + bsErrorDescription(aCode));

end;

procedure TfMain.GoDownloadClientDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).DownloadDone(aCode);

end;

procedure TfMain.GoDownloadClientProgress(Sender: TObject; aHandle, aCountLo, aCountHi, aSizeLo, aSizeHi: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).DownloadProgress(aCountLo, aCountHi, aSizeLo, aSizeHi);

end;

procedure TfMain.GoNeedUpload(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arUpload);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': начало закачки ' + PreSlash(aPath));

end;

procedure TfMain.GoServerUploadDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  LogMsg(CheckName(SelPeer.Username) + ': закачка завершена - ' + bsErrorDescription(aCode));

end;

procedure TfMain.GoUploadClientProgress(Sender: TObject; aHandle, aCountLo, aCountHi, aSizeLo, aSizeHi: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).UploadProgress(aCountLo, aCountHi, aSizeLo, aSizeHi);

end;

procedure TfMain.GoClientUploadDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).UploadDone(aCode);

end;

procedure TfMain.GoNeedZip(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

  if not SelectPeer(aHandle) then Exit;

  aOkay := fRights.HasRight(SelPeer.Username, arZip);

  if not aOkay then Exit;

  aRoot := fRights.GetRoot(SelPeer.Username);

  LogMsg(CheckName(SelPeer.Username) + ': начало упаковки ' + PreSlash(aPath));

end;

procedure TfMain.GoServerZipDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  LogMsg(CheckName(SelPeer.Username) + ': окончание архивирования - ' + bsErrorDescription(aCode));

end;

procedure TfMain.GoClientZipDone(Sender: TObject; aHandle, aCode: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).ZipDone(aCode);

end;

procedure TfMain.GoZipProgress(Sender: TObject; aHandle, aFileCount, aFileTotal, aByteCountLo, aByteCountHi, aByteTotalLo, aByteTotalHi: Integer);

begin

  if not SelectPeer(aHandle) then Exit;

  TfFiles(SelPeer.fFiles).ZipProgress(aFileCount, aFileTotal, aByteCountLo, aByteCountHi, aByteTotalLo, aByteTotalHi);

end;

procedure TfMain.GoNeedUnzip(Sender: TObject; aHandle: Integer; const aPath: WideString; var aOkay: WordBool; var aRoot: WideString);

begin

Информация о работе Разработка аналога системы p2p