Esempio n. 1
0
 private bool DequeueChunk(out string error)
 {
     error = null;
     try
     {
         Data.ChunkData chunk = null;
         lock (ChunkInsertQueue)
         {
             try
             {
                 chunk = ChunkInsertQueue.Dequeue();
             }
             //empty queue
             catch (InvalidOperationException) { }
         }
         if (chunk != null)
         {
             lock (chunk)
             {
                 if (!DAO.Terrain.ChunkData.Insert(chunk) && chunk.DataBaseID <= -1)
                 {
                     lock (ChunkInsertQueue)
                     {
                         //try again later
                         ChunkInsertQueue.Enqueue(chunk);
                     }
                 }
                 else
                 {
                     //atualiza index de base de dados adicionando o novo id
                     var dataBaseHashKey = chunk.DataBaseID.GetHashCode();
                     var dataBaseChunks  = this.ChunksByDataBaseID.GetOrAdd(dataBaseHashKey, new List <Data.ChunkData>());
                     lock (dataBaseChunks)
                     {
                         dataBaseChunks.Add(chunk);
                     }
                 }
             }
         }
         return(true);
     }
     catch (Exception ex)
     {
         error = ex.ToString();
         return(false);
     }
 }