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

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

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

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

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

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

Файлы: 1 файл

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

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

    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(FileTime, ModifiedTime);

    FileTimeToSystemTime(ModifiedTime, SystemTime);

    Result := SystemTimeToDateTime(SystemTime);

  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(FileTimeToDateTime(aFileTime));

  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(aHandle));

    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.Text);

  P2pAgent.SocksPort           := StrToIntDef(fSettings.edSocksPort.Text, 0);

  P2pAgent.SocksUsername       := Trim(fSettings.edSocksUser.Text);

  P2pAgent.SocksPassword       := Trim(fSettings.edSocksPass.Text);

  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(aCode)), 'Ошибка', MB_OK or MB_ICONERROR);

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.ListItem.Index);

  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(Sender: TObject; aCode: Integer);

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