/// <summary> /// Create the replay file for Replay mod to read /// </summary> /// <param name="replayFileName">Replay file name</param> public void CreateReplayFile(string replayFileName) { WriteLog("Creating replay file."); MetaData.duration = Convert.ToInt32((lastPacketTime - recordStartTime).TotalMilliseconds); MetaData.SaveToFile(); using (Stream recordingFile = new FileStream(Path.Combine(temporaryCache, recordingTmpFileName), FileMode.Open)) { using (Stream metaDataFile = new FileStream(Path.Combine(temporaryCache, MetaData.MetaDataFileName), FileMode.Open)) { using (ZipOutputStream zs = new ZipOutputStream(Path.Combine(ReplayFileDirectory, replayFileName))) { zs.PutNextEntry(recordingTmpFileName); recordingFile.CopyTo(zs); zs.PutNextEntry(MetaData.MetaDataFileName); metaDataFile.CopyTo(zs); zs.Close(); } } } File.Delete(Path.Combine(temporaryCache, recordingTmpFileName)); File.Delete(Path.Combine(temporaryCache, MetaData.MetaDataFileName)); WriteLog("Replay file created."); }
/// <summary> /// Stop recording and save replay file. Should called once before program exit /// </summary> public void OnShutDown() { if (!cleanedUp) { MetaData.duration = Convert.ToInt32((lastPacketTime - recordStartTime).TotalMilliseconds); MetaData.SaveToFile(); CloseRecordStream(); CreateReplayFile(); cleanedUp = true; } }
private void Initialize(int protocolVersion) { this.dataTypes = new DataTypes(protocolVersion); this.packetType = new PacketTypeHandler().GetTypeHandler(protocolVersion); this.protocolVersion = protocolVersion; if (!Directory.Exists(ReplayFileDirectory)) { Directory.CreateDirectory(ReplayFileDirectory); } if (!Directory.Exists(temporaryCache)) { Directory.CreateDirectory(temporaryCache); } recordStream = new BinaryWriter(new FileStream(Path.Combine(temporaryCache, recordingTmpFileName), FileMode.Create, FileAccess.ReadWrite)); recordStartTime = DateTime.Now; MetaData = new MetaDataHandler(); MetaData.date = (long)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds; MetaData.protocol = protocolVersion; MetaData.mcversion = ProtocolHandler.ProtocolVersion2MCVer(protocolVersion); MetaData.SaveToFile(); playerLastPosition = new Location(0, 0, 0); WriteLog("Start recording."); }