示例#1
0
 /// <summary>
 /// Obtiene un diccionario poblado desde el componente Query de una Uri
 /// parseado segun el formato donde '&' separa registros y '=' separa
 /// la clave del valor.
 /// </summary>
 /// <remarks>
 /// En caso de parametros repetidos se sobreescribe al ultimo valor, si
 /// falta el caracter '=' se saltea dicho parametro.
 /// </remarks>
 /// <param name="uri"></param>
 /// <returns></returns>
 public static Dictionary <string, string> QueryToDictionary(this Uri uri)
 {
     try
     {
         var result         = new Dictionary <string, string>();
         var query          = uri.GetComponents(UriComponents.Query, UriFormat.Unescaped);
         var nameValuePairs = query.TrimStart('?').Split("&".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
         foreach (var pair in nameValuePairs)
         {
             var vars = pair.Split('=');
             if (vars.GetLength(0) != 2)
             {
                 SimpleTrace.Trace(typeof(ExtensionMethods).FullName, "QueryToDictionary, Invalid Query Format at pair '{0}' of '{1}'", pair, uri.Query);
                 continue;
             }
             if (!result.ContainsKey(vars[0]))
             {
                 result.Add(vars[0], vars[1]);
             }
             else
             {
                 result[vars[0]] = vars[1];
             }
         }
         return(result);
     }
     catch (Exception e)
     {
         SimpleTrace.Exception(typeof(ExtensionMethods).FullName, e, "Uri.QueryToDictionary");
         return(null);
     }
 }
示例#2
0
 /// <summary>
 /// Obtien el componente Host:Port de una Uri en forma de IPEndPoint.
 /// </summary>
 /// <param name="uri">Objeto Uri</param>
 /// <remarks>
 /// La clase esta especializada para los esquemas "utn.service" y "utn.device".
 /// Cualquier otro esquema retorna null.
 /// </remarks>
 /// <returns>si es valido, el IPEndPoint equivalente, sino null.</returns>
 public static IPEndPoint GetIPEndPoint(this Uri uri)
 {
     try
     {
         if (uri == null)
         {
             return(null);
         }
         if (uri.Scheme == "utn.service")
         {
             return(new IPEndPoint(IPAddress.Any, uri.Port));
         }
         if (uri.Scheme == "utn.device")
         {
             var addr = IPAddress.Parse(uri.Host) ?? Dns.GetHostAddresses(uri.Host)[0];
             return(addr == null ? null : new IPEndPoint(addr, uri.Port));
         }
         return(null);
     }
     catch (Exception e)
     {
         SimpleTrace.Exception(typeof(ExtensionMethods).FullName, e, "Uri.GetIPEndPoint");
         return(null);
     }
 }
示例#3
0
        // Lanzado por .NET Remoting cuando la llamada remota se completa.
        public void LoadDeviceStateAsyncCallbackHandler(IAsyncResult ar)
        {
            var asyncCallBackData = (LoadDeviceStateHandler)ar.AsyncState;

            try
            {
                var ds = asyncCallBackData.EndInvoke(ar);
                if (ds == null)
                {
                    return;
                }
                if (!initialized)
                {
                    Type              = ds.Type;
                    State             = ds.State;
                    QTreeState        = ds.QTreeState;
                    LastLoginGPSPoint = ds.LastLoginGPSPoint;
                    LastKnownGPSPoint = ds.LastKnownGPSPoint;
                    initialized       = true;
                    return;
                }
                ds.Type              = Type;
                ds.State             = State;
                ds.QTreeState        = QTreeState;
                ds.LastLoginGPSPoint = LastLoginGPSPoint;
                ds.LastKnownGPSPoint = LastKnownGPSPoint;
                // si llega aca, fue un exito.
            }
            catch (Exception ex)
            {
                SimpleTrace.Exception(typeof(DeviceStateWrap).FullName, ex);
            }
        }
示例#4
0
 /// <summary>
 /// Obtiene del componente Path de una Uri.
 /// </summary>
 /// <param name="uri">Objeto Uri</param>
 /// <returns></returns>
 public static string GetPath(this Uri uri)
 {
     try
     {
         return(uri.GetComponents(UriComponents.Path, UriFormat.Unescaped));
     }
     catch (Exception e)
     {
         SimpleTrace.Exception(typeof(ExtensionMethods).FullName, e, "Uri.GetPath");
         return(null);
     }
 }
示例#5
0
 /// <summary>
 /// Obtiene del componente Query de una Uri, el valor correspondienta al campo
 /// especificado.
 /// </summary>
 /// <param name="uri">Objeto Uri</param>
 /// <param name="field">Campo a obtener</param>
 /// <param name="default">valor por defecto si el campo no esta presente.</param>
 /// <returns></returns>
 public static string GetQueryField(this Uri uri, string field, string @default)
 {
     try
     {
         var d = uri.QueryToDictionary();
         return(d.ContainsKey(field) ? d[field] : @default);
     }
     catch (Exception e)
     {
         SimpleTrace.Exception(typeof(ExtensionMethods).FullName, e, "Uri.GetQueryField");
         return(null);
     }
 }
示例#6
0
 private void AsyncCommitDeviceState()
 {
     try
     {
         if (Devices.NetworkSpine.State == SpineClientWrap.States.DISCONNECTED)
         {
             // silenciosamente, ignoro el commit pues no tengo spine a la vista.
             return;
         }
         var asyncCallback = new AsyncCallback(LoadDeviceStateAsyncCallbackHandler);
         // preparo el cliente.
         var remoteAsyncDelegate = new LoadDeviceStateHandler(Devices.NetworkSpine.GetDeviceState);
         // lanzamos el evento.
         remoteAsyncDelegate.BeginInvoke(id, asyncCallback, remoteAsyncDelegate);
     }
     catch (Exception e)
     {
         SimpleTrace.Exception(typeof(DeviceStateWrap).FullName, e);
     }
 }