ElektroKit Framework v2.0 | ( Complemento para el núcleo de .Net Framework )

Iniciado por Eleкtro, 30 Noviembre 2015, 08:35 AM

0 Miembros y 2 Visitantes están viendo este tema.

Eleкtro

Cita de: TrashAmbishion en 14 Abril 2016, 05:34 AMestoy haciendo lo siguiente añado la referencia

Declaro una variable
Código (vbnet) [Seleccionar]
Dim prueba As Elektro.Net.Tools.NetworkUtil

prueba me sale sin ningun metodo ni propiedad... que puede estar pasando toy con vs2015

Hola

No sale ningún miembro por que no le has asignado ningún valor a dicha variable (es una referecia nula), pero de todas formas la clase Elektro.Net.Tools.NetworkUtil no es instanciable, por lo que no le encuentro sentido a lo que estás intentando, ¿Cual es tu intención con esa variable?.

Si lo que pretendes es crear una referencia corta del espacio de nombres, entonces puedes hacerlo de la siguiente manera:
Código (vbnet) [Seleccionar]
Imports prueba = Elektro.Net.Tools.NetworkUtil

Public NotInheritable Class Form1 : Inherits Form

   Private Sub Test() Handles MyBase.Load

       Dim ip As String = prueba.GetPublicIp()
       Console.WriteLine(ip)

   End Sub

End Class


PD: Las clases que son instanciables están en los nombres de espacios que empiezan por: Elektro.X.Types (en este caso Elektro.Net.Types), y las que no son instanciables están en los espacios de nombre que empiezan por: Elektro.X.Tools (en este caso Elektro.Net.Tools).

Espero que te sirva de ayuda!

Saludos








TrashAmbishion

El ejemplo de NetWorkTrafficMonitor cuando lo cargo en el VS2010 de mi trabajo me da 1 error.......

Error   1

'Elektro.Net.Types.NetworkTrafficMonitor.Protected Friend Event TrafficChanged(sender As Object, e As Elektro.Net.Types.TrafficChangedEventArgs)' is not accessible in this context because it is 'Protected Friend'.

Salu2

Eleкtro

@TrashAmbishion

Cita de: TrashAmbishion en 15 Abril 2016, 17:16 PM'Elektro.Net.Types.NetworkTrafficMonitor.Protected Friend Event TrafficChanged(sender As Object, e As Elektro.Net.Types.TrafficChangedEventArgs)' is not accessible in this context because it is 'Protected Friend'.

Has descubierto un bug de diseño. Por algún motivo le cambié la visibilidad al evento (no se por qué lo hice, despues de haberlo testeado y haber escrito el ejemplo que estuviste intentado usar xD).

Si quieres puedes recompilar tu mismo la libería, solo tienes que buscar la clase NetworkTrafficMonitor y modificar la visibilidad del miembro...

de:
Código (vbnet) [Seleccionar]
Protected Friend Event TrafficChanged As EventHandler(Of TrafficChangedEventArgs)

a:
Código (vbnet) [Seleccionar]
Public Event TrafficChanged As EventHandler(Of TrafficChangedEventArgs)

De todas formas, aquí te subo la librería ya corregida y con algunos otros cambios:
(Elektro.Net.dll v1.6 BETA; .NetFx4.0; AnyCPU\Debug)




Y aquí tienes un ejemplo de uso (actualizado):

Código (vbnet) [Seleccionar]
Imports Elektro.Net.Enums
Imports Elektro.Net.Tools
Imports Elektro.Net.Types

Public NotInheritable Class Form1 : Inherits Form

   Friend WithEvents NetMon As NetworkTrafficMonitor

   Private Sub Form1_Shown() Handles MyBase.Shown
       Me.InitializeNetMon()
   End Sub

   Private Sub InitializeNetMon()

       Try
           If Not NetworkTrafficMonitor.GetAvaliableInterfaceNames.Any() Then
               Throw New Exception("Any available network interface found.")

           Else
               Me.NetMon = New NetworkTrafficMonitor(NetworkTrafficMonitor.GetAvaliableInterfaceNames.First())
               Me.NetMon.UpdateBehavior = TrafficMonitorUpdateBehavior.FireAlwaysAfterTick
               Me.NetMon.UpdateInterval = 1000 ' 1 sec
               Me.NetMon.Start()

           End If

       Catch ex As Win32Exception When ex.ErrorCode = -2147467259
           MessageBox.Show("Cannot initialize network monitor. Ensure to enable performance counters service.", "",
                           MessageBoxButtons.OK, MessageBoxIcon.Error)

       Catch ex As Exception
           Throw

       End Try

   End Sub

   ''' ----------------------------------------------------------------------------------------------------
   ''' <summary>
   ''' Handles the <see cref="NetworkTrafficMonitor.TrafficChanged"/> event of the NetMon instance.
   ''' </summary>
   ''' ----------------------------------------------------------------------------------------------------
   ''' <param name="sender">
   ''' The source of the event.
   ''' </param>
   '''
   ''' <param name="e">
   ''' The <see cref="TrafficChangedEventArgs"/> instance containing the event data.
   ''' </param>
   ''' ----------------------------------------------------------------------------------------------------
   Private Sub NetMon_TrafficChanged(ByVal sender As Object, ByVal e As TrafficChangedEventArgs) _
   Handles NetMon.TrafficChanged

       Me.LabelBytesReceived.Text = String.Format("Bytes received: {0} kb", (e.BytesReceived / 1024).ToString("n2"))
       Me.LabelDlSpeed.Text = String.Format("DL Speed: {0} kb/sec", (e.DiffBytesReceived / 1024).ToString("n2"))

       Me.LabelBytesSent.Text = String.Format("Bytes sent: {0} kb", (e.BytesSent / 1024).ToString("n2"))
       Me.LabelUlSpeed.Text = String.Format("UL Speed: {0} kb/sec", (e.DiffBytesSent / 1024).ToString("n2"))

   End Sub

   Private Sub BtDownloadUrl_Click() Handles BtDownloadUrl.Click

       Dim url As String = "http://download.thinkbroadband.com/10MB.zip"
       Dim client As New WebClient()
       client.DownloadFileAsync(New Uri(url), Path.GetTempFileName())

   End Sub

   Private Sub BtPauseMon_Click() Handles BtPauseMon.Click

       If Me.NetMon.IsActive Then
           Me.NetMon.Stop()
       Else
           Me.NetMon.Start()
       End If

   End Sub

End Class


Saludos








Lekim

Hola elektro

Me ha surgido el siguiente problema con Elektro.Kit

El ensamblado al que se hace referencia "Elektro.Net" no se pudo resolver Advertencia 1 El ensamblado al que se hace referencia "Elektro.Net" no se pudo resolver porque tiene una dependencia de "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" que no se encuentra en la versión de .NET Framework de destino actual ".NETFramework,Version=v4.0,Profile=Client". Quite las referencias a ensamblados que no se encuentran en la versión de .NET Framework de destino o cambie el destino del proyecto. WindowsApplication1


s2s


Añado...
Versión utilizada: VB2010 (posiblemente sea el problema)

Eleкtro

Lekim, me gustaría poder ayudarte pero ese problema no tiene relación con mi librería, es un problema de referencias de las librerías de .Net Framework.

Cómo indica en el warning, estás focalizando hacia la versión compacta (o 'perfil cliente') de los runtimes de .NetFx 4.0, lo que deberías hacer para resolverlo creo que ya lo sabes, debes focalizar a la versión completa en tu proyecto, y para ello debes tener instalada la versión completa de los runtimes, además del paquete de focalización para Visual Studio (Microsoft Multi-Targeting for .NET Framework 4, eso estando en VS2010 claro, en versiones superiores no es necesario), o simplemente podrías intentar descargar/obtener la librería System.web.dll (versión completa) y referenciar manualmente dicha librería en tu proyecto.

De todas formas, respecto a mi librería Elektro.Net.dll, deberías poder ignorar (y ocultar) el warning sin problema alguno, puesto que deberías poder utilizar todos los miembros del namespace Elektro.Net excepto aquellos que referencien miembros de la versión completa de System.Web.dll (que serán apenas 2 o 3 métodos de la clase Elektro.Net.Tools.WebUtil).

Saludos








Lekim

Cita de: Eleкtro en 16 Abril 2016, 12:02 PM
...simplemente podrías intentar descargar/obtener la librería System.web.dll (versión completa) y referenciar manualmente dicha librería en tu proyecto

Pues eso hice, pero aún así persistía el problema. Lo que quería usar era Elektro.Net.Enums.GoogleLanguage.

El caso es que este problema me ha servido para aprender actualizar el Framework de versiones viejas de VB.NET incluso en SO como XP. Y se soluciona el problema. Ya no da error.

Ahora mismo estoy haciendo un tutorial, que colgaré en el foro, útil para los que usen vb2010 o vb2012. Muy curioso.

Por cierto, Net simplemente deshabilitaba el Elektro.kit, con lo cual tengo que referenciarlo de nuevo.

La verdad es que el truquillo podría explicarse en tres líneas, pero creo que vale la pena explicarlo al detalle y con imágenes.




TrashAmbishion

Excelente,

Las modificaciones dieron resultados nada mas me dio un error a la hora de detectar el adaptador.

Cambio reciente:

Código (vbnet) [Seleccionar]

NetworkTrafficMonitor.GetAvaliableInterfaceNames.Any()


Esto no rula algo pasa con esa función de arriba.

Código (vbnet) [Seleccionar]

Me.netMon = New NetworkUtil.NetworkTrafficMonitor(NetworkTrafficMonitor.GetAvaliableInterfaceNames.First)


Ok, con la línea de arriba toma el 1er adaptador en mi caso "isatap" y trata de trabajar con él, ahora no recuerdo si brinca porque no lo logra o si es porque el valor que espera es un integer despues aclaro esto.

Solución que tome para mi caso muy particular, cargue los adaptadores en un listbox emparejado con su indice porque el espera un integer.

Listo todos los adaptadores

Código (vbnet) [Seleccionar]

    For Each adpcont In NetworkTrafficMonitor.GetAvaliableInterfaceNames

    Next


Y al selecionarlo se lo paso:

Código (vbnet) [Seleccionar]

     Me.NetMon = New NetworkTrafficMonitor(NetworkTrafficMonitor.GetAvaliableInterfaceNames(adpcont))

Eleкtro

No hay ningún error en lo que comentas, pero creo que existe algo de malentendimiento por tu parte sobre el manejo de colecciones genéricas en general, te explico:

La extensión de LINQ IEnumerable.Any() (en: GetAvailableInterfaceNames().Any()) sirve para evaluar si una colección enumerable está vacía, la extensión Any() devolverá True si está vacía, de lo contrario, False.
¿Qué problema le encuentras?, "no rula" puede significar mil cosas distintas, intenta ser más específico.

El único motivo por el cual la extensión Any() podría dar una excepción, sería al utilizar dicha extensión para evaluar una colección nula (Nothing), pero si observamos el código fuente de mi función, podemos comprobar que en ningun caso se devuelve una colección nula:

Cita de: ElektroKit
Código (vbnet) [Seleccionar]

Public Shared Function GetAvailableInterfaceNames() As IEnumerable(Of String)

   If PerformanceCounterCategory.Exists("Network Interface") Then
       Return New PerformanceCounterCategory("Network Interface").GetInstanceNames()

   Else
       Return Enumerable.Empty(Of String)()

   End If

End Function




Mi función GetAvailableInterfaceNames() devuelve una colección enumerable, por lo que efectivamente, como toda otra colección/Array, tiene un indexer que puedes utilizar para especificar un elemento de la colección (es decir, un nombre de adaptador) según el índice, por ejemplo: Dim adapterName As String = GetAvailableInterfaceNames(2).

La extensión de LINQ IEnumerable.First() devuelve el primer elemento de una colección. Recuerda que el código de ejemplo es eso, un ejemplo que toma la primera interfaz de red encontrada (asumiendo que existe al menos una) con: GetAvailableInterfaceNames().First().

Saludos








TrashAmbishion

Hola,

Reformulando la respuesta...

Esa línea trabaja bien lo que sucede es que devuelve "true" y entra a

Código (vbnet) [Seleccionar]
Throw New Exception("Any available network interface found.")

En la ventana de Inmediato le hice un print a:

Código (vbnet) [Seleccionar]
? NetworkTrafficMonitor.GetAvaliableInterfaceNames.First()

Y me devuelve "isatap.{7F59D061-64A2-4292-B817-69CFF83CE3A8}", entonces le hice un For Each para ver todos los valores que tenía y me mostró todos los adaptadores incluyendo la tarjeta de red Realtek.

Asi que le quite ese If y lo adapté como habia comentado anteriormente...

Disculpa la mala explicación..

Salu2

Eleкtro

Cita de: TrashAmbishion en 18 Abril 2016, 05:33 AM
Hola,

Reformulando la respuesta...

Esa línea trabaja bien lo que sucede es que devuelve "true" y entra a

Código (vbnet) [Seleccionar]
Throw New Exception("Any available network interface found.")

Coño, que despiste, tienes razón, en el código de ejemplo evaluo si es igual a True, cuando debería evaluar si es igual a False, para lanzar la excepción.

Ahora entiendo a lo que te refieres, disculpa. Ya está corregido, simplemente hay que añadirle un Not a la condicional:
Citar
Código (vbnet) [Seleccionar]
If Not NetworkTrafficMonitor.GetAvaliableInterfaceNames.Any() Then
               Throw New Exception("Any available network interface found.")

Saludos!