Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Como saber si ya existe un objeto

Estas en el tema de Como saber si ya existe un objeto en el foro de Visual Basic clásico en Foros del Web. Hola, estoy haciendo un servidor que tiene un array de winsocks (llamodo sckServer) y que va creando nuevos winsocks en tiempo de ejecución a medida ...
  #1 (permalink)  
Antiguo 16/01/2008, 05:05
 
Fecha de Ingreso: marzo-2007
Mensajes: 58
Antigüedad: 17 años, 2 meses
Puntos: 0
Exclamación Como saber si ya existe un objeto

Hola,

estoy haciendo un servidor que tiene un array de winsocks (llamodo sckServer) y que va creando nuevos winsocks en tiempo de ejecución a medida que le llegan peticiones de conexión de diferentes clientes. Los creo con 'Load'

Cuando el cliente cierra la conexión el control winsock correspontiente se descarga con la funcion Unload.



El problema es que no se cómo comprobar si el objeto sckServer(indice) existe o no antes de crearlo.
Tengo un maximo de 5 conexiones, y antes de crear una nueva he ver que indice esta libre.

Lo que estoy buscando es algo como esto:

Código:
Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)

Dim i As Integer

    If Index = 0 Then
        If numeroConexiones < 5 Then                 'Si tengo menos de 5 conexiones..
            For i = 1 To 5
                If sckServer(i) Is Nothing Then          'Si el objeto de indice i no existe..
                    Load sckServer(i)
                    sckServer(i).LocalPort = 0
                    sckServer(i).Accept requestID
                    numeroConexiones = numeroConexiones + 1
                    Exit For
                End If
            Next
        Else
            MsgBox "Petición de conexión rechazada por sobrecarga de conexiones."
        End If
    End If
End Sub
Pero la instrucción "If sckServer(i) Is Nothing Then" no funciona porq da error si el sckServer(i) no esta creado.

No hay alguna forma de saber si un objeto esta o no cargado?


Salu2
  #2 (permalink)  
Antiguo 16/01/2008, 05:27
 
Fecha de Ingreso: abril-2007
Mensajes: 187
Antigüedad: 17 años
Puntos: 1
Re: Como saber si ya existe un objeto

Si que se puede saber pero no es nada elegante
Lo más correcto seria que hicieses un control de errores como el que te muestro a continuación:
Código:
Private Sub sckServer_ConnectionRequest _
(Index As Integer, ByVal requestID As Long)
On Error GoTo VerError
Dim i As Integer

    If Index = 0 Then
        If numeroConexiones < 5 Then                 'Si tengo menos de 5 conexiones..
            For i = 1 To 5
                If sckServer(i) Is Nothing Then          'Si el objeto de indice i no existe..
                    Load sckServer(i)
                    sckServer(i).LocalPort = 0
                    sckServer(i).Accept requestID
                    numeroConexiones = numeroConexiones + 1
                    Exit For
                End If
            Next
        Else
            MsgBox "Petición de conexión rechazada por sobrecarga de conexiones."
        End If
    End If
Exit Sub
VerError:
  Select Case Err.Number
    Case 0
    Case 1
      MsgBox "La aplicación ..............." 
    Case Else
      MsgBox Err.Number & " | " & Err.Description
  End Select
End Sub

Solo tiene que provocar que 'pete' la aplicación y guardar el número de error y aplicarlo al select case del final y después lo tratas como quieras (case 1) o simplemente no lo tratas (case 0)


Espero que te sirva
  #3 (permalink)  
Antiguo 18/01/2008, 03:03
 
Fecha de Ingreso: marzo-2007
Mensajes: 58
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Como saber si ya existe un objeto

Al final lo he hecho asi y me funciona bien, lo pongo por si a alguien le interesa.

Código:
Private Function existe(index As Integer) As Boolean

On Error GoTo falso
    If Server(index).LocalPort = 0 Then
        existe = True
    End If
    existe = True
    GoTo salir
falso:
    existe = False
salir:
End Function
Si el objeto server no existe saltara a la etiqueta "falso" al hacer la consulta y existe sera false.

Gracias por la ayuda!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:36.