/// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='requestId'>
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <SessionDTO> GetByRequestIdAsync(this ISessionRequest operations, int requestId, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.GetByRequestIdWithHttpMessagesAsync(requestId, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='sessionDTO'>
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <SessionDTO> PostBySessionDTOAsync(this ISessionRequest operations, SessionDTO sessionDTO, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.PostBySessionDTOWithHttpMessagesAsync(sessionDTO, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
 public ISessionRequest[] GetArray()
 {
     lock (sync)
     {
         ISessionRequest[] ret = new ISessionRequest[tableById.Count];
         tableById.Values.CopyTo(ret, 0);
         return(ret);
     }
 }
Пример #4
0
        /// <summary>
        /// resuelve un nombre, se le pasa un objeto NodeBind sin direccion
        /// física y devuelve la dirección física correspondiente con el nodeId
        /// del objeto NodeBind pasado
        /// </summary>
        /// <param name="nodeId"></param>
        /// <returns></returns>
        public NodeBind Resolve(NodeId nodeId)
        {
            NodeBind ret = null;

            try
            {
                if (tableInner.ContainsKey(nodeId))
                {
                    DirectoryEntry entry = new DirectoryEntry();
                    if (tableInner.TryGetValue(nodeId, out entry))
                    {
                        if (entry.RoutedBySeed)
                        {
                            ret = entry.SeedBind;
                        }
                        else
                        {
                            ret = entry.NodeBind;
                        }
                    }
                }
                else if (localNode.Sessions.ExistsByNodeId(nodeId))
                {
                    // buscamos en las sesiones propias y sino en las resoluciones propias
                    ISessionRequest session = localNode.Sessions.GetSession(nodeId);
                    ret = session.NodeBindApplicant;
                }
                else
                {
                    // ISessionRequest[] seeds = localNode.Seeds.CloneArray();
                    // foreach (ISessionRequest seed in seeds)
                    // IEnumerator<KeyValuePair<string, ISessionRequest>> seed = localNode.Seeds.GetArray();
                    foreach (ISessionRequest seed in localNode.Seeds.GetArray())
                    {
                        ResolveRequest rreq  = new ResolveRequest(nodeId, localNode);
                        ResolveReply   reply = (ResolveReply)localNode.SendRequest(rreq, seed.NodeBindRemote);
                        if (reply != null)
                        {
                            if (reply.resolvedOk)
                            {
                                DirectoryEntry entry = new DirectoryEntry(seed.NodeBindRemote, reply.resolvedNodeBind);
                                localNode.Directory.AddEntryInner(entry);
                                ret = reply.resolvedNodeBind;
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Node.LogAppendLine(e);
            }
            return(ret);
        }
        public ISessionRequest GetSession(string auth)
        {
            ISessionRequest ret = null;

            try
            {
                if (tableById.ContainsKey(auth))
                {
                    ret = tableById[auth];
                }
            }
            catch (Exception err)
            {
                Node.LogAppendLine(err);
            }
            return(ret);
        }
        public ISessionRequest GetSession(NodeId nodeId)
        {
            ISessionRequest ret = null;

            try
            {
                if (tableByNodeId.ContainsKey(nodeId.Id))
                {
                    ret = tableByNodeId[nodeId.Id];
                }
            }
            catch (Exception err)
            {
                Node.LogAppendLine(err);
            }
            return(ret);
        }
 public void AddSession(ISessionRequest session)
 {
     try
     {
         lock (sync)
         {
             if (!tableById.ContainsKey(session.Auth))
             {
                 tableById.Add(session.Auth, session);
                 tableByNodeId.Add(session.NodeBindApplicant.NodeId.Id, session);
             }
         }
     }
     catch (Exception err)
     {
         Node.LogAppendLine(err);
     }
 }
 public void RemoveSession(NodeId nodeId)
 {
     try
     {
         lock (sync)
         {
             bool ret = false;
             if (tableByNodeId.ContainsKey(nodeId.Id))
             {
                 ISessionRequest session = tableByNodeId[nodeId.Id];
                 ret  = tableById.Remove(session.Auth);
                 ret |= tableByNodeId.Remove(nodeId.Id);
             }
         }
     }
     catch (Exception err)
     {
         Node.LogAppendLine(err);
     }
 }
 public bool RemoveSession(ISessionRequest session)
 {
     lock (sync)
     {
         bool ret = false;
         try
         {
             if (tableById.ContainsKey(session.Auth))
             {
                 ret  = tableById.Remove(session.Auth);
                 ret |= tableByNodeId.Remove(session.NodeBindApplicant.NodeId.Id);
             }
         }
         catch (Exception err)
         {
             Node.LogAppendLine(err);
         }
         return(ret);
     }
 }
        public void AddSession(NodeId nodeId, ISessionRequest session)
        {
            try
            {
                lock (sync)
                {
                    if (!tableById.ContainsKey(session.Auth))
                    {
                        tableById.Add(session.Auth, session);

                        if (tableById[session.Auth].Auth != session.Auth)
                        {
                            Console.Write("Error");
                        }

                        tableByNodeId.Add(nodeId.Id, session);
                    }
                }
            }
            catch (Exception err)
            {
                Node.LogAppendLine(err);
            }
        }
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='sessionDTO'>
 /// </param>
 public static SessionDTO PostBySessionDTO(this ISessionRequest operations, SessionDTO sessionDTO)
 {
     return(operations.PostBySessionDTOAsync(sessionDTO).GetAwaiter().GetResult());
 }
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='requestId'>
 /// </param>
 public static SessionDTO GetByRequestId(this ISessionRequest operations, int requestId)
 {
     return(operations.GetByRequestIdAsync(requestId).GetAwaiter().GetResult());
 }