Spanish Ayuda con B4RSerializator

jwgf

Member
Hola, amigos, no entiendo como decodificar los datos enviados desde B4A a B4R, supongamos que en B4a tengo este código
B4X:
astream.Write(ser.ConvertArrayToBytes(Array( "Credenciales","mi ssid","mi password", 121)))

Y en B4r tengo este código
B4X:
Sub astream_NewData (Buffer() As Byte)
    Dim be(10) As Object 'used as a storage buffer.
    Dim objects() As Object = ser.ConvertBytesToArray(Buffer, be)
    For Each o As Object In objects
        Log(o)
    Next
End Sub

Hasta aquí todo bien el log me muestra "Credenciales" luego "mi ssid" luego "mi contraseña" y por ultimo 121, pero como decodifico o asigno estos datos, por ejemplo como asigno el valor mi ssid a una variable string, como se que el 121 es un numero y como lo asigno a una variable tipo int, en otras palabras no entiendo como decodificar stream recibido, alguien me puede ayudar, gracias, Jorge
 

jwgf

Member
Hola a todos, lamentablemente no he podido dar con una solución, seguramente es muy sencillo, pero no he podido, he usado para probar GlobalStore, pero tampoco me funciono, casi todos los ejemplos que he visto muestran con un log(o) dentro de un loop que barre los objetos, claro esto funciona..... , pero no lo asignan a nada, también probé bc.StringFromBytes(objects(0)), pensando convierto ese array de bytes a un string y luego asigno ese string a una variable,.... pero nada me funciona, estoy totalmente perdido, cualquier ayuda sera mas que bien recibida, gracias, Jorge García
 

jwgf

Member
Hola amigos, me contesto a mi mismo, voy a explicar mi solución como yo la entiendo, recuerden que soy nuevo en esto y puede ser que no sea la forma correcta, espero que le sirva a alguien. El caso es que se requiere enviar por ejemplo 3 textos desde B4A a B4R, de manera tal de obtener dichos textos y poderlos guardar en variables del tipo String, se que la mayoría de las veces esto es evitable pero yo para mi idea esto es necesario, bueno en B4A, tenemos los tres textos que enviamos de esta forma:

B4X:
astream.Write(ser.ConvertArrayToBytes(Array( "texto1","texto2","texto3")))

Por lo que entiendo cada uno de estos textos se toman como objetos, luego se crea un array de objetos que es convertido en un flujo de bytes gracias al serializador y enviado como un flujo asincronico .
En el lado del B4R, recibo en un buffer dicho flujo y el serializador ejecuta la operación inversa, convierte el flujo de bytes en un array de objetos, luego voy leyendo cada uno de esos objetos y los convierto de un array de objeto a un array de bytes para finalmente convertir el array de byte en un string y poderlo asignar a una variable.
B4X:
Private Sub ingresoDatoAlServer (Buffer() As Byte)
    Dim be(10) As Object 'used as a storage buffer.
    Dim objects() As Object = ser.ConvertBytesToArray(Buffer, be)
    Dim texto1 As String = ""
    Dim texto2 As String =     ""
    Dim texto3 As String = ""
    Dim cdor As Byte = 0
    For Each o As Object In objects
        Dim temp() As Byte = bc.ObjectToBytes(o,30)
        Dim texto As String = bc.StringFromBytes(temp)
        If cdor = 0 Then
            cdor = cdor + 1
            texto1 = texto
            Log("Primer texto ",texto1)
        Else If cdor = 1 Then
            cdor = cdor + 1
            texto2 = texto
            Log("Segundo texto ",texto2)
        Else
            texto3 = texto
            Log("Tercer texto ",texto3)
        End If   
    Next
End Sub

Repito que esta es la forma que yo encontré no significa que sea la mejor ni la correcta, saludos Jorge.

PD. en realidad asigne a 30 la longitud del objeto ya que no encontré la forma de saber su longitud.
 
Top