#ifndef SESSION_H #define SESSION_H /* * @(#)Session.h * * This file is part of webCDwriter - Network CD Writing. * * Copyright (C) 1999-2004 Jörg P. M. Haeger * * webCDwriter is free software. See CDWserver.cpp for details. */ #include #include "File.h" #include "InputStream.h" #include "Types.h" class Server; class AudioToWAV; /** * A session on the server. * * @version 20041112 * @author Jörg P. M. Haeger */ class Session { Server *server; const char *ID; File *dir; FILE *fileOutputStream; File currentFile; File *currentTrack; int currentTrackNo; int filesNum, tracksNum; int64 sizeInBytes; int linksNum; AudioToWAV *audioToWAV; public: ~Session(); void checkContainsNoLink(const char *fileName); File *getFirstTrack(); int getFilesNum() { return filesNum; } const char *getID() { return ID; } static void getInfo(const char *ID, int &numOfFiles, int &numOfTracks, int &size_KB); int getLinksNum() { return linksNum; } File *getNextTrack(); Server *getServer() { return server; } static int getSessionSize(File &dir); int getSizeKB() { return sizeToKBytes(sizeInBytes); } int getTracksNum() { return tracksNum; } static int isSessionDir(File &dir); void linkFile(File &file, const char *linkName); void linkTrack(File &track, const char *type); void makeDir(const char *fileName, int mode, int time); void newTrack(const char *trackType, int link = 0); void putDummy(String &head, const char *fileName, int length, int mode, int time); void putFile(InputStream &inStream, const char *fileName, int length, int mode, int time); void putFileContinue(InputStream &inStream, int length); void putFileContinue(const char *buf, int length); void putFileEnd(int mode = -1, int time = 0); void putFileStart(const char *fileName); void putTrack(InputStream &inStream, int length); void remove(const char *fileName); private: Session(Server *server, const char *ID, const char *dir); void closeAudioTrack(); void copy(InputStream &inStream, FILE *outStream, int length); void copy(const char *buf, FILE *outStream, int length); void copy2(InputStream &inStream, FILE *outStream, int &length); void countFile(const char *pathName); void create(); void readInfo(); static void readInfo(File *dir, int &numOfFiles, int &numOfTracks, int &size_KB); static int sizeToKBytes(int64 size) { return (size + 1023) / 1024; } void writeInfo(); friend class Store; }; #endif