Example #1
0
        public override byte[] GetChunk(FileAndOffset fo, uint size)
        {
            string file;

            byte[] buf = null;
            file  = Convert.ToString(fo.file);
            file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
            file  = WorkingDirectory + "\\" + file;
            try
            {
                Monitor.Enter(chunkDataFilesMutex);
                MemoryStream stream;
                if (RamFileSystem.TryGetValue(file, out stream))
                {
                    LogUtility.LogUtility.LogFile("GetChunk: found " + file, LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                    long pos = stream.Position;
                    stream.Position = fo.offset;
                    buf             = new byte[size];
                    stream.Read(buf, 0, (int)size);
                    stream.Position = pos;
                    Monitor.Exit(chunkDataFilesMutex);
                    return(buf);
                }
                Monitor.Exit(chunkDataFilesMutex);
                return(null);
            }
            catch (Exception exc)
            {
                LogUtility.LogUtility.LogFile("EXCEPTION " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
            }
            return(buf);
        }
Example #2
0
        public override byte[] GetChunk(FileAndOffset fo, uint size)
        {
            string file;

            byte[] buf = null;
            file  = Convert.ToString(fo.file);
            file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
            file  = WorkingDirectory + "\\" + file;
            try
            {
                Monitor.Enter(chunkDataFilesMutex);

                FileStream fs = File.OpenRead(file);
                if (fs.Length <= fo.offset)
                {
                    fs.Close();
                    Monitor.Exit(chunkDataFilesMutex);
                    return(null);
                }
                buf         = new byte[size];
                fs.Position = fo.offset;
                fs.Read(buf, 0, buf.Length);
                fs.Close();
                Monitor.Exit(chunkDataFilesMutex);
            }
            catch (Exception exc)
            {
                LogUtility.LogUtility.LogFile("EXCEPTION " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
            }
            return(buf);
        }
Example #3
0
        public override void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo)
        {
            string file = "";
            FileStream fs;

            try
            {
                Monitor.Enter(chunkDataFilesMutex);
                if (allChunkDataFiles.Count > 0)
                {
                    int idx;
                    for (idx = 0; idx < allChunkDataFiles.Count; idx++)
                    {
                        if (File.Exists(allChunkDataFiles[idx]))
                        {
                            FileInfo fileInfo = new FileInfo(allChunkDataFiles[idx]);
                            if ((fileInfo.Length + size) < FileMaxSize)
                            {
                                file = allChunkDataFiles[idx];
                                break;
                            }
                        }
                    }
                }
                if (file == "")
                {
                    file = Convert.ToString(++LastFileId);
                    file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
                    file = WorkingDirectory + "\\" + file;
                    LogUtility.LogUtility.LogFile("new file " + file, LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                    allChunkDataFiles.Add(file);
                    fs = File.Create(file);
                    fo.file = LastFileId;
                    fo.offset = 0;
                }
                else
                {
                    int slash_idx;
                    string filename2 = "";

                    //slash_idx = file.IndexOf("\\");
                    slash_idx = file.LastIndexOf("\\");
                    if (slash_idx == -1)
                    {
                        filename2 = file;
                    }
                    else
                    {
                        filename2 = file.Substring(slash_idx + 1);
                    }
                    fs = File.Open(file, FileMode.Append, FileAccess.Write);
                    fo.file = StringName2LongName(filename2);
                    fo.offset = fs.Position;
                }
                fs.Write(data, (int)offset, (int)size);
                fs.Flush();
                fs.Close();
                Monitor.Exit(chunkDataFilesMutex);
            }
            catch (Exception exc)
            {
                LogUtility.LogUtility.LogFile("EXCEPTION IN AddNewChunk " + file + " " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
                fo.file = 0;
                fo.offset = 0;
            }
        }
Example #4
0
        public override byte[] GetChunk(FileAndOffset fo, uint size)
        {
            string file;
            byte[] buf = null;
            file = Convert.ToString(fo.file);
            file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
            file = WorkingDirectory + "\\" + file;
            try
            {
                Monitor.Enter(chunkDataFilesMutex);

                FileStream fs = File.OpenRead(file);
                if (fs.Length <= fo.offset)
                {
                    fs.Close();
                    Monitor.Exit(chunkDataFilesMutex);
                    return null;
                }
                buf = new byte[size];
                fs.Position = fo.offset;
                fs.Read(buf, 0, buf.Length);
                fs.Close();
                Monitor.Exit(chunkDataFilesMutex);
            }
            catch (Exception exc)
            {
                LogUtility.LogUtility.LogFile("EXCEPTION " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
            }
            return buf;
        }
Example #5
0
 public abstract void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo);
Example #6
0
 public abstract byte[] GetChunk(FileAndOffset fo, uint size);
Example #7
0
 public abstract void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo);
Example #8
0
 public abstract byte[] GetChunk(FileAndOffset fo, uint size);
Example #9
0
        public override void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo)
        {
            string file = "";
            MemoryStream stream = null;

            try
            {
                Monitor.Enter(chunkDataFilesMutex);
                if (allChunkDataFiles.Count > 0)
                {
                    int idx;
                    for (idx = 0; idx < allChunkDataFiles.Count; idx++)
                    {
                        if (RamFileSystem.TryGetValue(allChunkDataFiles[idx], out stream))
                        {
                            LogUtility.LogUtility.LogFile("AddNewChunk: found " + allChunkDataFiles[idx],LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                            if ((stream.Length + size) < FileMaxSize)
                            {
                                file = allChunkDataFiles[idx];
                                break;
                            }
                        }
                    }
                }
                if (file == "")
                {
                    file = Convert.ToString(++LastFileId);
                    file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
                    file = WorkingDirectory + "\\" + file;
                    LogUtility.LogUtility.LogFile("new file " + file, LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                    allChunkDataFiles.Add(file);
                    stream = new MemoryStream();
                    RamFileSystem.Add(file, stream);
                    fo.file = LastFileId;
                    fo.offset = 0;
                }
                else
                {
                    int slash_idx;
                    string filename2 = "";

                    //slash_idx = file.IndexOf("\\");
                    slash_idx = file.LastIndexOf("\\");
                    if (slash_idx == -1)
                    {
                        filename2 = file;
                    }
                    else
                    {
                        filename2 = file.Substring(slash_idx + 1);
                    }
                    LogUtility.LogUtility.LogFile("AddNewChunk2: found " + file + " " + filename2, LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                    fo.file = StringName2LongName(filename2);
                    fo.offset = stream.Position;
                }
                stream.Write(data,(int)offset,(int)size);
                Monitor.Exit(chunkDataFilesMutex);
            }
            catch (Exception exc)
            {
                LogUtility.LogUtility.LogFile("EXCEPTION IN AddNewChunk " + file + " " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
                fo.file = 0;
                fo.offset = 0;
            }
        }
Example #10
0
 public override byte[] GetChunk(FileAndOffset fo, uint size)
 {
     string file;
     byte[] buf = null;
     file = Convert.ToString(fo.file);
     file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
     file = WorkingDirectory + "\\" + file;
     try
     {
         Monitor.Enter(chunkDataFilesMutex);
         MemoryStream stream;
         if (RamFileSystem.TryGetValue(file, out stream))
         {
             LogUtility.LogUtility.LogFile("GetChunk: found " + file,LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
             long pos = stream.Position;
             stream.Position = fo.offset;
             buf = new byte[size];
             stream.Read(buf, 0, (int)size);
             stream.Position = pos;
             Monitor.Exit(chunkDataFilesMutex);
             return buf;
         }
         Monitor.Exit(chunkDataFilesMutex);
         return null;
     }
     catch (Exception exc)
     {
         LogUtility.LogUtility.LogFile("EXCEPTION " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
     }
     return buf;
 }
Example #11
0
 public override void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo)
 {
     throw new NotImplementedException();
     fo.file   = 0;
     fo.offset = 0;
 }
Example #12
0
 public override byte[] GetChunk(FileAndOffset fo, uint size)
 {
     throw new NotImplementedException();
     return(null);
 }
Example #13
0
        public override void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo)
        {
            string       file   = "";
            MemoryStream stream = null;

            try
            {
                Monitor.Enter(chunkDataFilesMutex);
                if (allChunkDataFiles.Count > 0)
                {
                    int idx;
                    for (idx = 0; idx < allChunkDataFiles.Count; idx++)
                    {
                        if (RamFileSystem.TryGetValue(allChunkDataFiles[idx], out stream))
                        {
                            LogUtility.LogUtility.LogFile("AddNewChunk: found " + allChunkDataFiles[idx], LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                            if ((stream.Length + size) < FileMaxSize)
                            {
                                file = allChunkDataFiles[idx];
                                break;
                            }
                        }
                    }
                }
                if (file == "")
                {
                    file  = Convert.ToString(++LastFileId);
                    file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
                    file  = WorkingDirectory + "\\" + file;
                    LogUtility.LogUtility.LogFile("new file " + file, LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                    allChunkDataFiles.Add(file);
                    stream = new MemoryStream();
                    RamFileSystem.Add(file, stream);
                    fo.file   = LastFileId;
                    fo.offset = 0;
                }
                else
                {
                    int    slash_idx;
                    string filename2 = "";

                    //slash_idx = file.IndexOf("\\");
                    slash_idx = file.LastIndexOf("\\");
                    if (slash_idx == -1)
                    {
                        filename2 = file;
                    }
                    else
                    {
                        filename2 = file.Substring(slash_idx + 1);
                    }
                    LogUtility.LogUtility.LogFile("AddNewChunk2: found " + file + " " + filename2, LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                    fo.file   = StringName2LongName(filename2);
                    fo.offset = stream.Position;
                }
                stream.Write(data, (int)offset, (int)size);
                Monitor.Exit(chunkDataFilesMutex);
            }
            catch (Exception exc)
            {
                LogUtility.LogUtility.LogFile("EXCEPTION IN AddNewChunk " + file + " " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
                fo.file   = 0;
                fo.offset = 0;
            }
        }
Example #14
0
 public override byte[] GetChunk(FileAndOffset fo, uint size)
 {
     throw new NotImplementedException();
     return null;
 }
Example #15
0
 public override void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo)
 {
     throw new NotImplementedException();
     fo.file = 0;
     fo.offset = 0;
 }
Example #16
0
        public override void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo)
        {
            string     file = "";
            FileStream fs;

            try
            {
                Monitor.Enter(chunkDataFilesMutex);
                if (allChunkDataFiles.Count > 0)
                {
                    int idx;
                    for (idx = 0; idx < allChunkDataFiles.Count; idx++)
                    {
                        if (File.Exists(allChunkDataFiles[idx]))
                        {
                            FileInfo fileInfo = new FileInfo(allChunkDataFiles[idx]);
                            if ((fileInfo.Length + size) < FileMaxSize)
                            {
                                file = allChunkDataFiles[idx];
                                break;
                            }
                        }
                    }
                }
                if (file == "")
                {
                    file  = Convert.ToString(++LastFileId);
                    file += FileType2Extension((byte)FileTypes.CHUNK_DATA_FILE_TYPE);
                    file  = WorkingDirectory + "\\" + file;
                    LogUtility.LogUtility.LogFile("new file " + file, LogUtility.LogLevels.LEVEL_LOG_MEDIUM);
                    allChunkDataFiles.Add(file);
                    fs        = File.Create(file);
                    fo.file   = LastFileId;
                    fo.offset = 0;
                }
                else
                {
                    int    slash_idx;
                    string filename2 = "";

                    //slash_idx = file.IndexOf("\\");
                    slash_idx = file.LastIndexOf("\\");
                    if (slash_idx == -1)
                    {
                        filename2 = file;
                    }
                    else
                    {
                        filename2 = file.Substring(slash_idx + 1);
                    }
                    fs        = File.Open(file, FileMode.Append, FileAccess.Write);
                    fo.file   = StringName2LongName(filename2);
                    fo.offset = fs.Position;
                }
                fs.Write(data, (int)offset, (int)size);
                fs.Flush();
                fs.Close();
                Monitor.Exit(chunkDataFilesMutex);
            }
            catch (Exception exc)
            {
                LogUtility.LogUtility.LogFile("EXCEPTION IN AddNewChunk " + file + " " + exc.Message + " " + exc.StackTrace, LogUtility.LogLevels.LEVEL_LOG_HIGH);
                fo.file   = 0;
                fo.offset = 0;
            }
        }