예제 #1
0
 public synchronized void ReviseItemsInReflectionWindow(
     TReflectionWindowStruc RW, byte[] ExistingItemsBA, TCanceller Canceller)
     throws IOException, CancelException {
   TSpaceHint LastItem = null;
   TSpaceHint Item = Items;
   while (Item != null) {
     boolean flRemove = false;
     if (RW.Container_IsNodeVisible(Item.BindingPointX, Item.BindingPointY)) {
       flRemove = true;
       int Idx = 0;
       int _ItemsCount = TDataConverter.ConvertLEByteArrayToInt32(ExistingItemsBA, Idx);
       Idx += 4;
       for (int I = 0; I < _ItemsCount; I++) {
         int ItemID = TDataConverter.ConvertLEByteArrayToInt32(ExistingItemsBA, Idx);
         Idx += 8; // . Int64
         if (ItemID == Item.ID) {
           flRemove = false;
           break; // . >
         }
         Idx = Item.ByteArraySkip(ExistingItemsBA, Idx);
       }
     }
     if (flRemove) {
       if (LastItem != null) LastItem.Next = Item.Next;
       else Items = Item.Next;
       ItemsTable.remove(Item.ID);
       ItemsCount--;
     } else LastItem = Item;
     // .
     if (Canceller != null) Canceller.Check();
     // .
     Item = Item.Next;
   }
 }
예제 #2
0
 public synchronized void FromByteArray(byte[] BA, TCanceller Canceller)
     throws IOException, CancelException {
   RemoveOldItems();
   // .
   int Idx = 0;
   int _ItemsCount = TDataConverter.ConvertLEByteArrayToInt32(BA, Idx);
   Idx += 4;
   for (int I = 0; I < _ItemsCount; I++) {
     int ItemID = TDataConverter.ConvertLEByteArrayToInt32(BA, Idx);
     Idx += 8; // . Int64
     TSpaceHint Item = ItemsTable.get(ItemID);
     if (Item == null) {
       Item = new TSpaceHint(ItemID, Reflector.metrics);
       // .
       Item.Next = Items;
       Items = Item;
       ItemsCount++;
       // .
       ItemsTable.put(ItemID, Item);
     }
     Idx = Item.FromByteArray(BA, Idx);
     // .
     if (Canceller != null) Canceller.Check();
   }
 }
예제 #3
0
 private synchronized void ItemsImageDataFiles_FromByteArray(byte[] BA, TCanceller Canceller)
     throws IOException, CancelException {
   RemoveOldItems();
   // .
   int Idx = 0;
   int _ItemsCount = TDataConverter.ConvertLEByteArrayToInt32(BA, Idx);
   Idx += 4;
   for (int I = 0; I < _ItemsCount; I++) {
     int HintID = TDataConverter.ConvertLEByteArrayToInt32(BA, Idx);
     Idx += 8; // . Int64
     int ImageDataFileID = TDataConverter.ConvertLEByteArrayToInt32(BA, Idx);
     Idx += 8; // . Int64
     TSpaceHintImageDataFile ItemsImageDataFiles_Item =
         ItemsImageDataFiles.GetItem(ImageDataFileID);
     Idx = ItemsImageDataFiles_Item.FromByteArray(BA, Idx);
     // .
     TSpaceHint Hint = ItemsTable.get(HintID);
     if (Hint != null) Hint.InfoImageDATAFileID = ImageDataFileID;
     // .
     if (Canceller != null) Canceller.Check();
   }
 }
예제 #4
0
 public int SupplyHintsWithImageDataFiles(TCanceller Canceller) throws Exception {
   ArrayList<TSpaceHint> _Hints = new ArrayList<TSpaceHint>();
   synchronized (this) {
     TSpaceHint Item = Items;
     while (Item != null) {
       if ((Item.InfoImageDATAFileID != 0)
           && (ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID) == null)) {
         boolean flDataFileIsFound = false;
         int Sz = _Hints.size();
         for (int I = 0; I < Sz; I++)
           if (_Hints.get(I).InfoImageDATAFileID == Item.InfoImageDATAFileID) {
             flDataFileIsFound = true;
             break; // . >
           }
         if (!flDataFileIsFound) {
           _Hints.add(Item);
           if (_Hints.size() >= SHWIDF_MAX_ITEMS_TO_PROCESS) break; // . >
         }
       }
       // .
       if (Canceller != null) Canceller.Check();
       // .
       Item = Item.Next;
     }
   }
   if (_Hints.size() == 0) return SHWIDF_RESULT_NOITEMTOSUPPLY; // . ->
   int Sz = _Hints.size();
   int[] _HintIDs = new int[Sz];
   for (int I = 0; I < Sz; I++) _HintIDs[I] = _Hints.get(I).ID;
   // .
   byte[] Data = null;
   String url = PrepareHintImagesURL(_HintIDs);
   HttpURLConnection Connection = Reflector.Server.OpenConnection(url);
   try {
     InputStream in = Connection.getInputStream();
     try {
       if (Canceller != null) Canceller.Check();
       // .
       int RetSize = Connection.getContentLength();
       if (RetSize == 0)
         throw new Exception(Reflector.context.getString(R.string.SUnknownServerResponse)); // . =>
       Data = new byte[RetSize];
       int Size;
       int SummarySize = 0;
       int ReadSize;
       while (SummarySize < Data.length) {
         ReadSize = Data.length - SummarySize;
         Size = in.read(Data, SummarySize, ReadSize);
         if (Size <= 0)
           throw new Exception(
               Reflector.context.getString(R.string.SConnectionIsClosedUnexpectedly)); // . =>
         SummarySize += Size;
       }
     } finally {
       in.close();
     }
   } finally {
     Connection.disconnect();
   }
   ItemsImageDataFiles_FromZippedByteArray(Data, Canceller);
   // . final check for supply
   synchronized (this) {
     TSpaceHint Item = Items;
     while (Item != null) {
       if ((Item.InfoImageDATAFileID != 0)
           && (ItemsImageDataFiles.ItemsTable.get(Item.InfoImageDATAFileID) == null))
         return SHWIDF_RESULT_SUPPLIEDPARTIALLY; // . ->
       // .
       if (Canceller != null) Canceller.Check();
       // .
       Item = Item.Next;
     }
   }
   return SHWIDF_RESULT_SUPPLIED;
 }
예제 #5
0
 @SuppressWarnings({"null", "unused"})
 public void GetHintsFromServer(TReflectionWindow ReflectionWindow, TCanceller Canceller)
     throws Exception {
   if (Reflector.flOffline) return; // . ->
   TReflectionWindowStruc RW = ReflectionWindow.GetWindow();
   TReflectorSpaceLays Lays = ReflectionWindow.getLays();
   TReflectionWindowActualityInterval ActualityInterval = ReflectionWindow.GetActualityInterval();
   // .
   String URL1 = Reflector.Server.Address;
   // . add command path
   URL1 =
       "http://"
           + URL1
           + "/"
           + "Space"
           + "/"
           + "2" /*URLProtocolVersion*/
           + "/"
           + Long.toString(Reflector.User.UserID);
   String URL2 = "SpaceWindow.png";
   // . add command parameters
   URL2 =
       URL2
           + "?"
           + "5" /*command version*/
           + ","
           + Double.toString(RW.X0)
           + ","
           + Double.toString(RW.Y0)
           + ","
           + Double.toString(RW.X1)
           + ","
           + Double.toString(RW.Y1)
           + ","
           + Double.toString(RW.X2)
           + ","
           + Double.toString(RW.Y2)
           + ","
           + Double.toString(RW.X3)
           + ","
           + Double.toString(RW.Y3)
           + ",";
   short[] InvisibleLays = Lays.GetDisabledLaysIndexes();
   short InvisibleLaysCount;
   if (InvisibleLays != null) InvisibleLaysCount = (short) InvisibleLays.length;
   else InvisibleLaysCount = 0;
   URL2 = URL2 + Integer.toString(InvisibleLaysCount) + ",";
   for (int I = 0; I < InvisibleLaysCount; I++)
     URL2 = URL2 + Integer.toString(InvisibleLays[I]) + ',';
   URL2 = URL2 + Integer.toString(Reflector.VisibleFactor) + ",";
   URL2 = URL2 + "1" /*Dynamic hint data version*/ + ",";
   // . Visualization UserData
   int TSVUserDataSize = 0;
   byte[] TSVUserData = null;
   if (TSVUserData != null) TSVUserDataSize = TSVUserData.length;
   int Idx = 0;
   byte[] UserData = new byte[4 /*SizeOf(TSVUserDataSize)*/ + TSVUserDataSize];
   byte[] BA = TDataConverter.ConvertInt32ToLEByteArray(TSVUserDataSize);
   System.arraycopy(BA, 0, UserData, Idx, BA.length);
   Idx += BA.length;
   if (TSVUserDataSize > 0) {
     System.arraycopy(TSVUserData, 0, UserData, Idx, TSVUserData.length);
     Idx += TSVUserData.length;
   }
   String UserDataString;
   ByteArrayOutputStream BOS = new ByteArrayOutputStream();
   try {
     Base64OutputStream B64S = new Base64OutputStream(BOS, Base64.URL_SAFE);
     try {
       B64S.write(UserData);
     } finally {
       B64S.close();
     }
     UserDataString = new String(BOS.toByteArray());
   } finally {
     BOS.close();
   }
   URL2 = URL2 + UserDataString + ",";
   // .
   URL2 =
       URL2
           + Double.toString(ActualityInterval.GetBeginTimestamp())
           + ","
           + Double.toString(ActualityInterval.EndTimestamp)
           + ",";
   // .
   URL2 =
       URL2
           + Integer.toString(RW.Xmn)
           + ","
           + Integer.toString(RW.Ymn)
           + ","
           + Integer.toString(RW.Xmx)
           + ","
           + Integer.toString(RW.Ymx);
   boolean flUpdateProxySpace = false;
   if (flUpdateProxySpace) URL2 = URL2 + "," + "1" /*flUpdateProxySpace = true*/;
   // .
   byte[] URL2_Buffer;
   try {
     URL2_Buffer = URL2.getBytes("windows-1251");
   } catch (Exception E) {
     URL2_Buffer = null;
   }
   byte[] URL2_EncryptedBuffer = Reflector.User.EncryptBufferV2(URL2_Buffer);
   // . encode string
   StringBuffer sb = new StringBuffer();
   for (int I = 0; I < URL2_EncryptedBuffer.length; I++) {
     String h = Integer.toHexString(0xFF & URL2_EncryptedBuffer[I]);
     while (h.length() < 2) h = "0" + h;
     sb.append(h);
   }
   URL2 = sb.toString();
   // .
   String URL = URL1 + "/" + URL2 + ".png";
   // .
   HttpURLConnection Connection = Reflector.Server.OpenConnection(URL);
   try {
     InputStream in = Connection.getInputStream();
     try {
       if (Canceller != null) Canceller.Check();
       // .
       byte[] HintDataSizeBA = new byte[4];
       TNetworkConnection.InputStream_ReadData(
           in, HintDataSizeBA, HintDataSizeBA.length, Canceller, Reflector.context);
       int HintDataSize = TDataConverter.ConvertLEByteArrayToInt32(HintDataSizeBA, 0);
       byte[] HintData = new byte[HintDataSize];
       TNetworkConnection.InputStream_ReadData(
           in, HintData, HintDataSize, Canceller, Reflector.context);
       HintData = UnPackByteArray(HintData);
       ReviseItemsInReflectionWindow(RW, HintData, Canceller);
       FromByteArray(HintData, Canceller);
     } finally {
       in.close();
     }
   } finally {
     Connection.disconnect();
   }
 }