diff --git a/doc/Class Diagram.svg b/doc/Class Diagram.svg new file mode 100644 index 0000000..4b0af63 --- /dev/null +++ b/doc/Class Diagram.svg @@ -0,0 +1,7038 @@ + + +trackertoolsserverP2PremoteExceptionprotocolP2PlocalExceptionguiexceptionclientP2P-socket : DatagramSocket+TrackerManagementUDP(tracker : HostItem, logger : Logger)+run() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getHostItemSocket(hostItem : HostItem) : Object#closeHostItemSocket(hostItem : HostItem) : voidTrackerManagementUDP-addr : HostItem+ClientHandler(s : Socket)+run() : void-handleClientRequest() : booleanClientHandler-socket : ServerSocket+TrackerManagementTCP(tracker : HostItem, logger : Logger)+run() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getHostItemSocket(hostItem : HostItem) : Object#closeHostItemSocket(hostItem : HostItem) : voidTrackerManagementTCP#tracker : HostItem#logger : Logger#hostList : HostItem = new ArrayList<>()#ratioUp : Map<HostItem, Long> = new HashMap<>()#ratioDown : Map<HostItem, Long> = new HashMap<>()#fileList : Map<String, List<HostItem>> = new HashMap<>()#fileSize : Map<String, Long> = new HashMap<>()#stop : boolean#writeLock : AtomicBoolean#readLock : AtomicInteger+TrackerManagement(tracker : HostItem, logger : Logger)#handleDiscover(pd : T) : void#handleRatio(pd : T) : void#handleListResponse(pd : T, host : HostItem) : void#handleUnregister(pd : T) : void#getHostItemSocket(hostItem : HostItem) : Object#closeHostItemSocket(hostItem : HostItem) : void#handleUpdateRatio(pd : T) : void#handleRegister(pd : T) : void#handleListRequest(pd : T) : void#handleSizeRequest(pd : T) : void#handleRequest(pd : T) : void+setStop() : voidTrackerManagement-tracker : HostItem-directories : Directories-logger : Logger~DEBUG : boolean = true+Tracker(hostname : String, port : int, isInteractive : boolean)+main(args : String[]) : voidTracker+TrackerPortRange()TrackerPortRange+ServerPortRange()ServerPortRange#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<?>#sendNotATracker(pd : T) : void#sendInternalError(pd : T) : void#sendNotFound(pd : T) : void#sendEmptyDirectory(pd : T) : void#sendEmptyFile(pd : T) : void#sendUnknownHost(pd : T) : voidServeErrors+searchByName(filesArray : String[], searchInput : String) : String[]+searchByExtention(filesArray : String[], searchInput : String) : String[]SearchFile#portMax : int#portMin : int#defaultPort : int#type : String+PortRange(portMin : int, portMax : int, defaultPort : int, type : String)+isPortInRange(port : int) : boolean+toString() : StringPortRangeErrorInfoWarningActionDebugProgression<<enumeration>>LogLevel-logFile : Path-debugMode : boolean+Logger(logFile : String, debugMode : boolean)+write(text : String, logLevel : LogLevel) : void+write(e : Exception, logLevel : LogLevel) : void+writeTCP(text : String, logLevel : LogLevel) : void+writeTCP(e : Exception, logLevel : LogLevel) : void+writeUDP(text : String, logLevel : LogLevel) : void+writeUDP(e : Exception, logLevel : LogLevel) : voidLogger-hostname : String-port : int-tcpSocket : Socket-udpSocket : DatagramSocket-inetAddress : InetAddress+HostItem(hostname : String, port : int)+getTCPSocket() : Socket+tryGetTCPSocket() : Socket+closeTCPSocket() : void+getUDPSocket() : DatagramSocket+tryGetUDPSocket() : DatagramSocket+closeUDPSocket() : void+toString() : String+equals(other : Object) : boolean+hashCode() : int+HostItem(s : Socket)HostItem-projectName : String-dataHomeDirectory : String-os : String+Directories(projectName : String)-setDataHomeDirectory() : void+createSubdir(subdir : String) : void-openDataHomeDirectory(subdir : String) : void+askOpenDataHomeDirectory(subdir : String, scanner : Scanner) : voidDirectories+write(array : byte[], start : int, value : int) : void+write16Bits(array : byte[], start : int, value : int) : void+write(array : byte[], start : int, value : long) : void+readInt(array : byte[], start : int) : int+readInt16Bits(array : byte[], start : int) : int+readLong(array : byte[], start : int) : long+cleanStrings(str : String) : String+write(byteArray : byte[], strArray : String[], start : int, separator : String) : void+readStringArray(byteArray : byte[], start : int, size : int, separator : String) : String[]+computeStringArraySize(strArray : String[], separator : String) : int+write(array : byte[], str : String, start : int) : void+readString(array : byte[], start : int, size : int) : String+readString(array : byte[], start : int, endStr : String) : String+write(dst : byte[], src : byte[], start : int) : void+readByteArray(src : byte[], start : int, end : int) : byte[]BytesArrayTools-directories : Directories-subdir : String = "seeded/"-logger : Logger-tracker : HostItem-server : HostItem~DEBUG : boolean = true+ServerP2P(hostnameServer : String, portServer : int, hostnameTracker : String, portTracker : int, isInteractive : boolean)+main(args : String[]) : voidServerP2P-socket : DatagramSocket+ServerManagementUDP(baseDirectory : String, server : HostItem, tracker : HostItem, logger : Logger)+run() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getTrackerSocket() : Object#closeSocket() : voidServerManagementUDP-addr : HostItem+ClientHandler(s : Socket)+run() : void-handleClientRequest() : booleanClientHandler-socket : ServerSocket+ServerManagementTCP(baseDirectory : String, server : HostItem, tracker : HostItem, logger : Logger)+run() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getTrackerSocket() : Object#closeSocket() : voidServerManagementTCP#stop : boolean#fileListWatcher : FileWatcher#logger : Logger#baseDirectory : String#server : HostItem#tracker : HostItem#punisher : Random = new Random()#ratioWatcher : RatioWatcher+ServerManagement(baseDirectory : String, server : HostItem, tracker : HostItem, logger : Logger)+setStop() : void#closeSocket() : void+updateFileList() : void#sendListResponse(pd : T) : void#sendHashResponse(pd : T) : void#sendLoadResponse(pd : T) : void#sendSizeResponse(pd : T) : void#getTrackerSocket() : Object#sendUnregisterRequest() : void#handleRequest(pd : T) : voidServerManagement+RatioWatcherUDP(logger : Logger, millis : long, tracker : HostItem)#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getTrackerSocket() : Object#closeTrackerSocket() : voidRatioWatcherUDP+RatioWatcherTCP(logger : Logger, millis : long, tracker : HostItem)#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getTrackerSocket() : Object#closeTrackerSocket() : voidRatioWatcherTCP~punishmentFactor : double = 1.2#logger : Logger#stop : boolean#time : long#force : boolean#tracker : HostItem#thread : Thread#cachePunishmentProbability : Map<HostItem, Double> = new HashMap<>()#lock : boolean+RatioWatcher(logger : Logger, millis : long, tracker : HostItem)+run() : void#clean() : void#getPunishmentProbability(application : HostItem) : double+setStop() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<?>#getTrackerSocket() : Object#closeTrackerSocket() : voidRatioWatcher+FileWatcherUDP(logger : Logger, millis : long, server : HostItem, tracker : HostItem, baseDirectory : String)#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#registerTracker() : voidFileWatcherUDP+FileWatcherTCP(logger : Logger, millis : long, server : HostItem, tracker : HostItem, baseDirectory : String)#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#registerTracker() : voidFileWatcherTCP#fileList : String[] = new String[0]#logger : Logger#stop : boolean#time : long#force : boolean#server : HostItem#tracker : HostItem#baseDirectory : String#sha512 : Map<String, byte[]> = new HashMap<>()#thread : Thread+FileWatcher(logger : Logger, millis : long, server : HostItem, tracker : HostItem, baseDirectory : String)+getSha512Map() : Map<String, byte[]>+trigger() : void+run() : void#registerTracker() : void#updateFileList() : boolean+setStop() : void#initSha512() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : voidFileWatcher-serialVersionUID : long = 12LVersionRemoteError-serialVersionUID : long = 12LUnknownHost-serialVersionUID : long = 12LProtocolRemoteError-serialVersionUID : long = 12LNotFound-serialVersionUID : long = 12LNotATracker-serialVersionUID : long = 12LInternalRemoteError-serialVersionUID : long = 12LEmptyFile-serialVersionUID : long = 12LEmptyDirectory-client : HostItem-server : HostItem-dataSize : long-DATA_SIZE_POSITION : int = PAYLOAD_START_POSITION-SERVER_PORT_START_POSITION : int = DATA_SIZE_POSITION + 8-CLIENT_PORT_START_POSITION : int = SERVER_PORT_START_POSITION + 2-HOSTNAMES_START_POSITION : int = CLIENT_PORT_START_POSITION + 2+UpdateRatio(client : HostItem, server : HostItem, dataSize : long)#UpdateRatio(packet : byte[])#toPacket() : byte[]UpdateRatio-hostItem : HostItem-HOSTNAME_START_POSITION : int = PAYLOAD_START_POSITION + 2+Unregister(hostItem : HostItem)#Unregister(packet : byte[])#toPacket() : byte[]Unregister-filename : String-totalSize : long-TOTAL_SIZE_POSITION : int = PAYLOAD_START_POSITION-FILENAME_POSITION : int = TOTAL_SIZE_POSITION + 8+SizeResponse(filename : String, totalSize : long)#SizeResponse(packet : byte[])#toPacket() : byte[]SizeResponse-filename : String+SizeRequest(filename : String)#SizeRequest(packet : byte[])#toPacket() : byte[]SizeRequest+codeType : CodeType+codeValue : byte#RRCODE_POSITION : int = 1-BY_CODE : Map<Byte, RequestResponseCode> = new HashMap<>()-RequestResponseCode(codeType : CodeType, codeValue : byte)#fromCode(code : byte) : RequestResponseCodeLIST_REQUESTLOAD_REQUESTHASH_REQUESTDISCOVER_REQUESTREGISTERUNREGISTERRATIO_REQUESTUPDATE_RATIOSIZE_REQUESTLIST_RESPONSELOAD_RESPONSEHASH_RESPONSEDISCOVER_RESPONSERATIO_RESPONSEDENIEDSIZE_RESPONSEVERSION_ERRORPROTOCOL_ERRORINTERNAL_ERROREMPTY_DIRECTORYNOT_FOUNDEMPTY_FILENOT_A_TRACKERUNKNOWN_HOST<<enumeration>>RequestResponseCode-hostItem : HostItem-HOSTNAME_START_POSITION : int = PAYLOAD_START_POSITION + 2+Register(hostItem : HostItem)#Register(packet : byte[])#toPacket() : byte[]Register-hostItem : HostItem-totalUp : long-totalDown : long-TOTAL_UP_START_POSITION : int = PAYLOAD_START_POSITION-TOTAL_DOWN_START_POSITION : int = TOTAL_UP_START_POSITION + 8-PORT_START_POSITION : int = TOTAL_DOWN_START_POSITION + 8-HOSTNAME_START_POSITION : int = PORT_START_POSITION + 2+RatioResponse(hostItem : HostItem, totalUp : long, totalDown : long)#RatioResponse(packet : byte[])#toPacket() : byte[]RatioResponse-hostItem : HostItem-HOSTNAME_START_POSITION : int = PAYLOAD_START_POSITION + 2+RatioRequest(hostItem : HostItem)#RatioRequest(packet : byte[])#toPacket() : byte[]RatioRequest-CHECKSUM_POSITION : int = 2-remoteHost : HostItem-responseSocketAddress : SocketAddress-responseSocket : DatagramSocket-requestSocket : DatagramSocket+ProtocolP2PPacketUDP(payload : T)#send(socket : DatagramSocket) : void#send(socket : DatagramSocket, addr : SocketAddress) : void+sendRequest(socket : Object) : void+ProtocolP2PPacketUDP(socket : Object)+sendResponse(response : U) : void+receiveResponse() : ProtocolP2PPacket<?>-ProtocolP2PPacketUDP(packet : byte[])-constructPacket(packet : byte[]) : void-constructPacket(packet : byte[], responseSocket : DatagramSocket) : void#toPacket() : byte[]-computeCheckSum(packet : byte[]) : int-setCheckSum(packet : byte[]) : void-checkCheckSum(packet : byte[]) : void+getHostItem() : HostItemProtocolP2PPacketUDP-responseSocket : Socket-requestSocket : Socket+ProtocolP2PPacketTCP(payload : T)#send(socket : Socket) : void+sendRequest(socket : Object) : void+ProtocolP2PPacketTCP(socket : Object)+sendResponse(response : U) : void+receiveResponse() : ProtocolP2PPacket<?>-ProtocolP2PPacketTCP(packet : byte[])-constructPacket(packet : byte[]) : void-constructPacket(packet : byte[], responseSocket : Socket) : void#toPacket() : byte[]+getHostItem() : HostItemProtocolP2PPacketTCP-PROTOCOL_VERSION : byte = 0x12#VERSION_POSITION : int = 0#version : byte#payload : Payload+ProtocolP2PPacket(payload : T)+sendRequest(socket : Object) : void+sendResponse(response : U) : void+getHostItem() : HostItem+receiveResponse() : ProtocolP2PPacket<?>#ProtocolP2PPacket(socket : Object)#ProtocolP2PPacket(packet : byte[])#checkProtocolVersion() : voidProtocolP2PPacket#requestResponseCode : RequestResponseCode#PAYLOAD_SIZE_POSITION : int = 4#PAYLOAD_START_POSITION : int = 8+Payload(requestResponseCode : RequestResponseCode)#Payload(packet : byte[])-checkRequestResponseCode() : void#toPacket() : byte[]#setPayloadSize(size : int, packet : byte[]) : void#getPayloadSize(packet : byte[]) : intPayload-filename : String-maxSizePartialContent : long-offset : long-hostItem : HostItem-OFFSET_POSITION : int = PAYLOAD_START_POSITION-MAX_SIZE_PARTIAL_CONTENT_POSITION : int = OFFSET_POSITION + 8-FILENAME_SIZE_POSITION : int = MAX_SIZE_PARTIAL_CONTENT_POSITION + 8-FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4+LoadRequest(filename : String, offset : long, maxSizePartialContent : long, hostItem : HostItem)#LoadRequest(packet : byte[])#toPacket() : byte[]LoadRequest-filename : String-hashes : Map<HashAlgorithm, byte[]> = new HashMap<>()-FILENAME_SIZE_POSITION : int = PAYLOAD_START_POSITION-FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4+HashResponse(filename : String, hashes : Map<HashAlgorithm, byte[]>)#HashResponse(packet : byte[])#toPacket() : byte[]+getHash(hashAlgo : HashAlgorithm) : byte[]HashResponse-filename : String-algoList : HashAlgorithm[]-FILENAME_SIZE_POSITION : int = PAYLOAD_START_POSITION-FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4+HashRequest(filename : String, algoList : HashAlgorithm[])#HashRequest(packet : byte[])#toPacket() : byte[]HashRequest-name : String-BY_NAME : Map<String, HashAlgorithm> = new HashMap<>()-HashAlgorithm(name : String)+getName() : String#fromName(name : String) : HashAlgorithmSHA512MD5<<enumeration>>HashAlgorithm-filename : String-offset : long-partialContent : byte[]-OFFSET_POSITION : int = PAYLOAD_START_POSITION-FILENAME_SIZE_POSITION : int = OFFSET_POSITION + 8-FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4+FilePart(filename : String, offset : long, partialContent : byte[])#FilePart(packet : byte[])#toPacket() : byte[]-setOffset(packet : byte[]) : void-getFilenameSize(packet : byte[]) : int-setFilename(packet : byte[]) : void-setPartialContent(packet : byte[]) : voidFilePart-fileList : String[]+FileList(fileList : String[])#FileList(packet : byte[])#toPacket() : byte[]FileList-hostList : HostItem-filename : String-FILENAME_SIZE_POSITION : int = PAYLOAD_START_POSITION-FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4+DiscoverResponse(filename : String, hostList : List<HostItem>)#DiscoverResponse(packet : byte[])#toPacket() : byte[]+getHostList() : List<HostItem>DiscoverResponse-filename : String+DiscoverRequest(filename : String)#DiscoverRequest(packet : byte[])#toPacket() : byte[]DiscoverRequest-filename : String-offset : long-OFFSET_POSITION : int = PAYLOAD_START_POSITION-FILENAME_POSITION : int = OFFSET_POSITION + 8+Denied(filename : String, offset : long)#Denied(packet : byte[])#toPacket() : byte[]DeniedREQUESTREQUEST_TRACKERRESPONSEERROR<<enumeration>>CodeType-serialVersionUID : long = 12LVersionError-serialVersionUID : long = 12LTransmissionError-serialVersionUID : long = 12LSocketClosed-serialVersionUID : long = 12LSizeError-serialVersionUID : long = 12LProtocolError-serialVersionUID : long = 12LInternalError-serialVersionUID : long = 13L+MainWindow()MainWindow+main(args : String[]) : voidGui-jLabel1 : JLabel-jToggleButton1 : JToggleButton-message : String-serialVersionUID : long = 13L+ErrorFrame(message : String)-initComponents() : void-jToggleButton1ActionPerformed(evt : ActionEvent) : voidErrorFrame-jButton1 : JButton-jButton2 : JButton-jLabel1 : JLabel-jList1 : JList<String>-jScrollPane1 : JScrollPane-serialVersionUID : long = 13L-listFilesToDownload : String[]-clientManagement : ClientManagement-logger : Logger-smtcp : ServerManagementTCP-smudp : ServerManagementUDP+DownloadSelectionGen(listFilesToDownload : String[], clientManagement : ClientManagement, logger : Logger, smtcp : ServerManagementTCP, smudp : ServerManagementUDP)-initComponents() : void-jButton1ActionPerformed(evt : ActionEvent) : void-jButton2ActionPerformed(evt : ActionEvent) : voidDownloadSelectionGen-serialVersionUID : long = 13L-fileToDownload : String-clientManagement : ClientManagement-logger : Logger-smtcp : ServerManagementTCP-smudp : ServerManagementUDP+DownloadFileGUI(fileToDownload : String, clientManagement : ClientManagement, logger : Logger, smtcp : ServerManagementTCP, smudp : ServerManagementUDP)+download() : voidDownloadFileGUI-logDir : String = "logs/"-partsDir : String = ".parts/"-loggerServer : Logger-loggerClient : Logger-directories : Directories-tracker : HostItem-server : HostItem~DEBUG : boolean = false-hostnameServer : String-hostnameTracker : String-portServer : int-portTracker : int-protocolP2P : String+initDirectoriesAndLoggers() : void+ClientP2PGUI(hostnameServer : String, portServer : int, hostnameTracker : String, portTracker : int, protocolP2P : String)+connect() : voidClientP2PGUI~loggerC : Logger-smtcp : ServerManagementTCP-smudp : ServerManagementUDP+ClientInterfaceGUI(clientManagement : ClientManagement, logger : Logger, smtcp : ServerManagementTCP, smudp : ServerManagementUDP)+run() : void-initHostList() : booleanClientInterfaceGUI-jButton1 : JButton-jComboBox1 : JComboBox<String>-jLabel1 : JLabel-jLabel2 : JLabel-jLabel3 : JLabel-jLabel4 : JLabel-jLabel5 : JLabel-jLabel6 : JLabel-jTextField1 : JTextField-jTextField2 : JTextField-jTextField3 : JTextField-jTextField4 : JTextField-serialVersionUID : long = 13L+ArgumentsGen()-initComponents() : void-jTextField1ActionPerformed(evt : ActionEvent) : void-jTextField2ActionPerformed(evt : ActionEvent) : void-jButton1ActionPerformed(evt : ActionEvent) : voidArgumentsGen-serialVersionUID : long = 12LRemoteException-serialVersionUID : long = 13LLocalException-logDir : String = "logs/"-partsDir : String = ".parts/"-loggerServer : Logger-loggerClient : Logger-directories : Directories-tracker : HostItem-server : HostItem-scanner : Scanner~DEBUG : boolean = false+initDirectoriesAndLoggers() : void+ClientP2P(hostnameServer : String, portServer : int, hostnameTracker : String, portTracker : int)-printUsage(serverPortRange : ServerPortRange, trackerPortRange : TrackerPortRange) : void+main(args : String[]) : voidClientP2P+ClientManagementUDP(baseDirectory : String, tracker : HostItem, partsSubdir : String, logger : Logger, client : HostItem)#initDownloader(filename : String) : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getTrackerSocket() : Object#closeTrackerSocket() : void#getHostItemSocket(hostItem : HostItem) : Object#closeHostItemSocket(hostItem : HostItem) : voidClientManagementUDP+ClientManagementTCP(baseDirectory : String, tracker : HostItem, partsSubdir : String, logger : Logger, client : HostItem)#initDownloader(filename : String) : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getTrackerSocket() : Object#closeTrackerSocket() : void#getHostItemSocket(hostItem : HostItem) : Object#closeHostItemSocket(hostItem : HostItem) : voidClientManagementTCP#baseDirectory : String#partsSubdir : String#hostList : HostItem = new ArrayList<>()#tracker : HostItem#client : HostItem#logger : Logger#downLoader : ClientDownload+ClientManagement(baseDirectory : String, tracker : HostItem, partsSubdir : String, logger : Logger, client : HostItem)#getTrackerSocket() : Object#closeTrackerSocket() : void+initHostList() : void-computeHashsum(filename : String, h : HashAlgorithm) : byte[]#getHostItemSocket(hostItem : HostItem) : Object#closeHostItemSocket(hostItem : HostItem) : void+listDirectory() : String[]#initDownloader(filename : String) : void+download(filename : String) : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : voidClientManagement-scanner : Scanner-list : String[]+ClientInterfaceCLI(clientManagement : ClientManagement, logger : Logger, scanner : Scanner)+run() : void-initHostList() : boolean-initFileList() : booleanClientInterfaceCLI#clientManagement : ClientManagement-logger : Logger+ClientInterface(clientManagement : ClientManagement, logger : Logger)#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : voidClientInterface+ClientDownloadUDP(filename : String, hostList : List<HostItem>, partsSubdir : String, dirStorage : String, logger : Logger, client : HostItem, tracker : HostItem)#createDownloadPart(hostItem : HostItem) : ClientDownloadPart#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getHostItemSocket(hostItem : HostItem) : Object#closeHostItemSocket(hostItem : HostItem) : voidClientDownloadUDP+ClientDownloadTCP(filename : String, hostList : List<HostItem>, partsSubdir : String, dirStorage : String, logger : Logger, client : HostItem, tracker : HostItem)#createDownloadPart(hostItem : HostItem) : ClientDownloadPart#closeHostItemSocket(hostItem : HostItem) : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>#getHostItemSocket(hostItem : HostItem) : ObjectClientDownloadTCP-socket : DatagramSocket+ClientDownloadPartUDP(manager : ClientDownload, filename : String, socket : DatagramSocket, partsSubdir : String, logger : Logger, client : HostItem, server : HostItem)#getSocket() : Object#closeSocket() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>ClientDownloadPartUDP-socket : Socket+ClientDownloadPartTCP(manager : ClientDownload, filename : String, socket : Socket, partsSubdir : String, logger : Logger, client : HostItem, server : HostItem)#getSocket() : Object#closeSocket() : void#writeLog(text : String, logLevel : LogLevel) : void#writeLog(e : Exception, logLevel : LogLevel) : void#createProtocolP2PPacket(payload : T) : ProtocolP2PPacket<T>ClientDownloadPartTCP#receivedBytesCount : long#toDoTasks : List<Long>#pendingTasks : List<Long>#tasksDone : List<Long>#tasksListsLock : boolean#stop : boolean#failed : boolean#filename : String#noTask : boolean#partsSubdir : String#MAX_PARTIAL_SIZE : long = 4096#manager : ClientDownload#logger : Logger#client : HostItem-server : HostItem+ClientDownloadPart(manager : ClientDownload, filename : String, partsSubdir : String, logger : Logger, client : HostItem, server : HostItem)+getReceivedBytesCount() : Long+hasFailed() : boolean+setStop() : void+run() : void#closeSocket() : void+getFailed() : List<Long>+getDone() : List<Long>+assignTask(task : Long) : void+doTasks() : void#reqPart(offset : Long) : ProtocolP2PPacket<?>#getSocket() : Object+downloadPart(d : T) : booleanClientDownloadPart#hostList : HostItem#filename : String#hash512 : byte[]#sockList : ClientDownloadPart = new ArrayList<ClientDownloadPart>()#ratioUpdater : Map<HostItem, Long> = new HashMap<>()#offsetsToAsk : List<Long> = new ArrayList<Long>()#offsetsPending : List<Long> = new ArrayList<Long>()#stop : boolean#size : long#MAX_PARTIAL_SIZE : long = 4096#partsSubdir : String#dirStorage : String#success : boolean = false#logger : Logger#client : HostItem#tracker : HostItem#lastPercentProgress : int#lastTimeProgress : Instant~DIFF_TIME_PROGRESS_MILLIS : int = 2000~DIFF_PERCENT_PROGRESS : int = 5+ClientDownload(filename : String, hostList : List<HostItem>, partsSubdir : String, dirStorage : String, logger : Logger, client : HostItem, tracker : HostItem)+getHashSum512() : byte[]#stopTasks() : void+setStop() : void#assignTasks() : void#createDownloadPart(hostItem : HostItem) : ClientDownloadPart#initThreads() : void#checkTasksStatus() : void+sendRatioUpdate() : void#getHashSum512(hostItem : HostItem) : byte[]#purgeList() : void#reassembleFile() : void#setSize() : void#closeHostItemSocket(hostItem : HostItem) : void+run() : void#printProgression() : void#init() : void#getHostItemSocket(hostItem : HostItem) : ObjectClientDownloadT : PayloadT : PayloadT : Payload-logger1#manager1-hostItem1-loggerClient1#logger1#server1-addr1-loggerClient1#hostList*-algoList*-tracker1-client1-addr1#tracker1#logger1-logger1#clientManagement1-loggerServer1-logger1#logger1#logger1#ratioWatcher1-loggerServer1#logger1#logger1#client1#tracker1-smudp1#tracker1#tracker1#client1-directories1-smtcp1-directories1#tracker1#tracker1#server1-smtcp1-tracker1-smtcp1-directories1loggerC1-hostItem1-clientManagement1-server1-smudp1-tracker1-clientManagement1+codeType1-tracker1-logger1-hostItem1#sockList*#client1-server1#hostList*-hostItem1-server1-hostItem1#logger1-logger1#fileListWatcher1#requestResponseCode1-server1-remoteHost1#downLoader1-server1#hostList*-directories1-hostList*-smudp1#payload1 diff --git a/doc/Class Diagram1.svg b/doc/Class Diagram1.svg deleted file mode 100644 index 965f5d2..0000000 --- a/doc/Class Diagram1.svg +++ /dev/null @@ -1,2728 +0,0 @@ - - -clientP2P-baseDirectory : String-UDPPort : int-host : String-socket : DatagramSocket+ClientManagementUDP(baseDirectory : String, host : String, UDPPort : int)+run() : void-download(filename : String) : void-listDirectory() : String[]ClientManagementUDP-host : String-port : int-directories : Directories+ClientP2P()+main(args : String[]) : voidClientP2P-baseDirectory : String-TCPPort : int-host : String-socket : Socket+ClientManagementTCP(baseDirectory : String, host : String, TCPPort : int)+run() : void-download(filename : String) : void-listDirectory() : String[]ClientManagementTCPexception-serialVersionUID : long = 12LProtocolError-serialVersionUID : long = 12LSizeError-serialVersionUID : long = 12LTransmissionError-serialVersionUID : long = 12LVersionError-serialVersionUID : long = 12LInternalErrorprotocolP2P-PROTOCOL_VERSION : byte = 0x12#VERSION_POSITION : int = 0#version : byte#payload : Payload+ProtocolP2PPacket(payload : Payload)+sendRequest(socket : Object) : void+sendResponse(response : ProtocolP2PPacket) : void+receiveResponse() : ProtocolP2PPacket#ProtocolP2PPacket(socket : Object)#ProtocolP2PPacket(packet : byte[])#checkProtocolVersion() : voidProtocolP2PPacket-fileList : String[]+FileList(fileList : String[])#FileList(packet : byte[])#toPacket() : byte[]FileListREQUESTRESPONSEERROR<<enumeration>>CodeType+codeType : CodeType+codeValue : byte#RRCODE_POSITION : int = 1-BY_CODE : Map<Byte, RequestResponseCode> = new HashMap<>()-RequestResponseCode(codeType : CodeType, codeValue : byte)#fromCode(code : byte) : RequestResponseCodeLIST_REQUESTLOAD_REQUESTLIST_RESPONSELOAD_RESPONSEVERSION_ERRORPROTOCOL_ERRORINTERNAL_ERROREMPTY_DIRECTORYNOT_FOUNDEMPTY_FILE<<enumeration>>RequestResponseCode-filename : String-maxSizePartialContent : long-offset : long-OFFSET_POSITION : int = PAYLOAD_START_POSITION-MAX_SIZE_PARTIAL_CONTENT_POSITION : int = OFFSET_POSITION + 8-FILENAME_SIZE_POSITION : int = MAX_SIZE_PARTIAL_CONTENT_POSITION + 8-FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4+LoadRequest(filename : String, offset : long, maxSizePartialContent : long)#LoadRequest(packet : byte[])#toPacket() : byte[]LoadRequest-filename : String-totalSize : long-offset : long-partialContent : byte[]-OFFSET_POSITION : int = PAYLOAD_START_POSITION-TOTAL_FILESIZE_POSITION : int = OFFSET_POSITION + 8-FILENAME_SIZE_POSITION : int = TOTAL_FILESIZE_POSITION + 8-FILENAME_POSITION : int = FILENAME_SIZE_POSITION + 4+FilePart(filename : String, totalSize : long, offset : long, partialContent : byte[])#FilePart(packet : byte[])#toPacket() : byte[]-setOffset(packet : byte[]) : void-setTotalSize(packet : byte[]) : void-getFilenameSize(packet : byte[]) : int-setFilename(packet : byte[]) : void-setPartialContent(packet : byte[]) : voidFilePart-responseSocket : Socket-requestSocket : Socket+ProtocolP2PPacketTCP(payload : Payload)#send(socket : Socket) : void+sendRequest(socket : Object) : void+ProtocolP2PPacketTCP(socket : Object)+sendResponse(response : ProtocolP2PPacket) : void+receiveResponse() : ProtocolP2PPacket-ProtocolP2PPacketTCP(packet : byte[])-constructPacket(packet : byte[]) : void-constructPacket(packet : byte[], responseSocket : Socket) : void#toPacket() : byte[]ProtocolP2PPacketTCP#requestResponseCode : RequestResponseCode#PAYLOAD_SIZE_POSITION : int = 4#PAYLOAD_START_POSITION : int = 8+Payload(requestResponseCode : RequestResponseCode)#Payload(packet : byte[])-checkRequestResponseCode() : void#toPacket() : byte[]#setPayloadSize(size : int, packet : byte[]) : void#getPayloadSize(packet : byte[]) : intPayload-CHECKSUM_POSITION : int = 2-responseSocketAddress : SocketAddress-responseSocket : DatagramSocket-requestSocket : DatagramSocket+ProtocolP2PPacketUDP(payload : Payload)#send(socket : DatagramSocket) : void#send(socket : DatagramSocket, addr : SocketAddress) : void+sendRequest(socket : Object) : void+ProtocolP2PPacketUDP(socket : Object)+sendResponse(response : ProtocolP2PPacket) : void+receiveResponse() : ProtocolP2PPacket-ProtocolP2PPacketUDP(packet : byte[])-constructPacket(packet : byte[]) : void-constructPacket(packet : byte[], responseSocket : DatagramSocket) : void#toPacket() : byte[]-computeCheckSum(packet : byte[]) : int-setCheckSum(packet : byte[]) : void-checkCheckSum(packet : byte[]) : voidProtocolP2PPacketUDPremoteException-serialVersionUID : long = 12LEmptyDirectory-serialVersionUID : long = 12LVersionRemoteError-serialVersionUID : long = 12LNotFound-serialVersionUID : long = 12LProtocolRemoteError-serialVersionUID : long = 12LEmptyFile-serialVersionUID : long = 12LInternalRemoteErrorserverP2P-fileList : String[]-baseDirectory : String-UDPPort : int-socket : DatagramSocket+ServerManagementUDP(baseDirectory : String, UDPPort : int)+run() : void-initFileList() : void-sendInternalError(pd : ProtocolP2PPacketUDP) : voidServerManagementUDP-port : int-directories : Directories+ServerP2P()+main(args : String[]) : voidServerP2P-fileList : String[]-baseDirectory : String-TCPPort : int-socket : ServerSocket+ServerManagementTCP(baseDirectory : String, TCPPort : int)+run() : void-initFileList() : void-sendInternalError(pd : ProtocolP2PPacketTCP) : voidServerManagementTCPtools-projectName : String-dataHomeDirectory : String-os : String+Directories(projectName : String)-setDataHomeDirectory() : void-openDataHomeDirectory() : void+askOpenDataHomeDirectory() : voidDirectories+write(array : byte[], start : int, value : int) : void+write16Bits(array : byte[], start : int, value : int) : void+write(array : byte[], start : int, value : long) : void+readInt(array : byte[], start : int) : int+readInt16Bits(array : byte[], start : int) : int+readLong(array : byte[], start : int) : longBytesArrayTools#payload1+codeType1#requestResponseCode1Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] Visual Paradigm Standard [evaluation copy] diff --git a/doc/VPProjects/uml.vpp b/doc/VPProjects/uml.vpp index c6c5a6b..d7b487c 100644 Binary files a/doc/VPProjects/uml.vpp and b/doc/VPProjects/uml.vpp differ diff --git a/doc/classdiagram.xml b/doc/classdiagram.xml deleted file mode 100644 index c7b5e59..0000000 --- a/doc/classdiagram.xml +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file