private void Open(float lat, float lon) { CommitCacheRequired = false; SectorCached = -1; Latitude = (short)lat; Longitude = (short)lon; lock (syncLock) { Transition(States.LOCKED_AND_SYNCING); if (File.Exists(FileName)) { //STrace.Trace(typeof(GR2).FullName,2, "QTREE/GR2: Abriendo archivo " + FileName); using (var sw = File.OpenRead(FileName)) { var data = new byte[512]; sw.Read(data, 0, 512); sw.Close(); unsafe { fixed(byte *ptrBuffer = &data[0]) { Headers = (Gr2Headers) Marshal.PtrToStructure(new IntPtr(ptrBuffer), typeof(Gr2Headers)); } } } Transition(States.INSERVICE); return; } STrace.Debug(typeof(GR2).FullName, String.Format("QT0003: El archivo no existe. Ruta: {0}", FileName)); Transition(States.FAILURE); } }
private void Create(float lat, float lon) { CommitCacheRequired = false; SectorCached = -1; Latitude = (short)lat; Longitude = (short)lon; Headers = new Gr2Headers { Signature = "QF-v0.5", base_lat = (short)lat, base_lon = (short)lon, Revision = 0, Status = (char)1 }; lock (syncLock) { Transition(States.LOCKED_AND_SYNCING); if (!File.Exists(FileName)) { //STrace.Trace(typeof(GR2).FullName,2, "QTREE/GR2: Creando archivo de tamaño y layout."); using (var sw = File.Create(FileName)) { var data = new byte[512]; unsafe { fixed(byte *ptrBuffer = &data[0]) { Marshal.StructureToPtr(Headers, new IntPtr(ptrBuffer), true); } } sw.Write(data, 0, 512); data = new byte[512]; for (var y = 0; y < 60; y++) { for (var x = 0; x < 60; x++) { sw.Write(data, 0, 512); } } sw.Close(); } Transition(States.INSERVICE); return; } STrace.Debug(typeof(GR2).FullName, String.Format("QT0002: El archivo ya existe. Ruta: {0}", FileName)); Transition(States.FAILURE); } }