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); }
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); }
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; } }
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; }
public abstract void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo);
public abstract byte[] GetChunk(FileAndOffset fo, uint size);
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; } }
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; }
public override void AddNewChunk(byte[] data, uint offset, uint size, long chunkId, out FileAndOffset fo) { throw new NotImplementedException(); fo.file = 0; fo.offset = 0; }
public override byte[] GetChunk(FileAndOffset fo, uint size) { throw new NotImplementedException(); return(null); }
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; } }
public override byte[] GetChunk(FileAndOffset fo, uint size) { throw new NotImplementedException(); return null; }