private String PrepareHintImagesURL(int[] HintIDs) throws IOException { String URL1 = Reflector.Server.Address; // . add command path URL1 = "http://" + URL1 + "/" + "Space" + "/" + "2" /*URLProtocolVersion*/ + "/" + Long.toString(Reflector.User.UserID); String URL2 = "TypesSystem" + "/" + Integer.toString(SpaceDefines.idTHINTVisualization) + "/" + "DataFiles.dat"; // . add command parameters URL2 = URL2 + "?" + "1" /*command version*/; StringBuilder SB = new StringBuilder(); for (int I = 0; I < HintIDs.length; I++) if (I < (HintIDs.length - 1)) SB.append(Integer.toString(HintIDs[I]) + ";"); else SB.append(Integer.toString(HintIDs[I])); URL2 = URL2 + "," + SB.toString(); // . 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 + ".dat"; return URL; }
@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(); } }