Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - DarkMatrix

#91
Cita de: BlackZeroX▓▓▒▒░░ en 15 Junio 2010, 07:01 AM
Cita de: e500 en 15 Junio 2010, 05:53 AM
Cita de: DarkMatrix en 15 Junio 2010, 03:07 AM
Yo hace mucho hize un actualizador con el modulo Csocketmaster y es el que uso actualmente para actualizar el juego que hize en vb. El juego es Online y hasta ahora el actualizador lo hace muy bien. Acomodare el codigo del actualizador y comentare el codigo para postearlo y aportarlo a la comunidad.

PD: Pueden ver el juego en www.novaweb.ve.tc o www.novaweb.megabyet.net

Muchas gracias, esperaré el codigo con ansiedad!!  ;-)

Saludos

Eso que te dijeron es mas EGO y SPAM publicitario!¡, por lo escrito!¡, no creo que te de codigo!¡.

Si deseas EJEMPLOS, PROYECTOS HECHOS esta la pagina de PSC

Dulce Infierno Lunar!¡.


Me sorprenden comentarios como este viniendo de un user como BlackZeroX▓▓▒▒░░ -.-!!

Si mas aqui el code prometido, es el que yo uso y hasta ahora no me ha fallado.

El code me parece que es simple, todo se hace desde el Form Load:

Código (vb) [Seleccionar]

Private Sub Form_Load()

1         On Error GoTo Form_Load_Error

2         Call RegisterComponent(App.Path & "\unzip32.dll", DllRegisterServer)
         
3         TempUpdateList = App.Path & "\updatelist.txt"     ' Archivo que guarda la informacion de los archivos actualizados
4         TempFileList = App.Path & "\filelist.txt"         ' Donde seran almacenados los archivos actuales

5         If Command = "GenerateUpdateList" Then
6             If mArchivos.ArchivoExiste(App.Path & "\updatelist.txt") Then Call mArchivos.BorrarArchivo(App.Path & "\updatelist.txt")
7             Call Generate_FileList(App.Path, 1, App.Path & "\updatelist.txt", HostUrl)
8             MsgBox "Listo"
9             End
10        End If

11        If mArchivos.ArchivoExiste(TempUpdateList) Then mArchivos.BorrarArchivo TempUpdateList
12        If mArchivos.ArchivoExiste(TempFileList) Then mArchivos.BorrarArchivo TempFileList
13        If mArchivos.ArchivoExiste(App.Path & "\updatelist.zip") Then mArchivos.BorrarArchivo App.Path & "\updatelist.zip"
14        If mArchivos.ArchivoExiste(App.Path & "\updatelist.txt") Then mArchivos.BorrarArchivo App.Path & "\updatelist.txt"
         
15        Set Download = New CDownload

16        Me.Show

17        If Descargar_Updatelist = True Then               ' Descarga el Updatelist
18            Call Generar_Lista_De_Archivos                ' Genera la lista de archivos
19            Call Comprobar_Actualizaciones(App.Path)      ' Compara archivos en busca de actualizaciones
20            Call Descargar_Actualizaciones                ' Descargar Actualizaciones
21            Call SetStatus("Actualizacion Completa...")   ' Establece el Mensaje de que se completo todo
22            cmdAceptar.Enabled = True                     ' Activa el mensaje para activar la aplicacion Principal
23        Else
24            Call SetStatus("Fallo al Tratar de Actualizar...")    ' Fallo la actualizacion.
25        End If

26        Exit Sub

Form_Load_Error:

27        MsgBox "Error " & Err.Number & " (" & Err.Description & ") En La Linea Nº " & Erl & " Del Procedimiento Form_Load del Formulario frmDownloader", vbCritical + vbOKOnly, "Error"

End Sub


Todo esta en el zip.

En el form Principal debemos espesificar la URL del sitio en la parte de declaraciones, esta URL sera el host donde esta alojado el archivo updatelist.zip que contiene el updatelist.txt. Este archivo contiene la informacion de los archivos actualizados.

Lo primero que hace el programa es descargar el archivo updatelist.zip lo descomprime y carga el updatelist.txt, posterior a eso el programa genera una lista con los archivos del directorio de la aplicacion. Luego el programa compara los archivos del updatelist.txt (Archivos actualizados) con la lista de archivos generada (Archivos de la carpeta de la aplicacion) y los agrega a la lista de archivos a actualizar.

Por ultimo se llama a la funcion Descargar_Archivos que se encargara de descargar todos los archivos hasta actualizarlos todos. Una vez finalizado todo entonces se activa el boton aceptar para activar la otra aplicacion o cualquier otra cosa que se quiera colocar hay.

PD: Para Generar la lista de archivos actualizados el actualizador debe estar en la misma carpeta de la aplicacion actualizada, se ejecuta la aplicacion con el parametro GenerateUpdateList y generara el archivo updatelist.txt, este archivo debera comprimirse y subirse al host junto con los archivos actualizados. OJO en la carpeta de la aplicacion no deben ningun otro archivo que no sea el utilizado por la aplicacion exceptuando el programa que actualiza.

PD2: Es recomendable que los ejecutables exe, las dll o los ocx esten comprimidos en .zip para que no haya problemas al actualizar. Cuando se genera el updatelist.txt, debe reemplazarse la URL de descarga del exe, dll o ocx que se haya comprimido. OJO! no es obligatorio hacerlo solo que algunos servidores no admiten la descarga de ejecutables por seguridad.

Ejemplo: Genere el archivo updatelist.txt lo abro y estan todas las lineas de los archivos a actualizarse, si mi aplicacion principal se llama Programa.exe entonces debo buscarlo y ponerle Programa.zip:

La Linea aparece asi:
"\updater.exe",176128,"13be50d187646260f165276a38c8d2d4","http://www.URL_DEL_SITIO.net/CARPETA_DE_ACTUALIZACIONES/updater.exe"

Cambiarla asi:
"\updater.exe",176128,"13be50d187646260f165276a38c8d2d4","http://www.URL_DEL_SITIO.net/CARPETA_DE_ACTUALIZACIONES/updater.zip"


Si hay algun error o alguna sugerencia para mejorar el code pues bienvenido sea.



Descargar Source Code:
http://www.megaupload.com/?d=XSO26CMG
#92
Yo hace mucho hize un actualizador con el modulo Csocketmaster y es el que uso actualmente para actualizar el juego que hize en vb. El juego es Online y hasta ahora el actualizador lo hace muy bien. Acomodare el codigo del actualizador y comentare el codigo para postearlo y aportarlo a la comunidad.

PD: Pueden ver el juego en www.novaweb.ve.tc o www.novaweb.megabyet.net
#93
con el ejemplo que te di, ya teniendo un server y un cliente solo sera cuestion de adaptar el code del server en el cliente :S. es cuestion de usar un poco la imaginacion.

Teniendo ese como base puedes hacer lo que pides.
#95
Cuando Recibes alguna informacion del alguno de los clientes se acciona el evento DataArrival del Winsock, si el Winsock esta en un Array osea hay varios Clientes conectados en un array de Winsocks el mismo evento DataArrival te devuelve el Index.

Ejemplo:

Código (vb) [Seleccionar]
Private Sub WinSock_DataArrival(Index As Integer, ByVal bytesTotal As Long)
    Dim Datos As String
    WS(Index).GetData Datos, vbString, bytesTotal
    If Datos = "Hola" Then WS(Index).SendData "Respuesta"
End Sub
#96
Winsock(Index).SendData Datos, Donde Index es el Indice del Winsock al Cual quieres enviar los datos.
#97
Cita de: Nanoc en 28 Febrero 2010, 12:12 PM
Y en el caso de que no reciba ese caracter al final de los datos que sugieres que haga mi aplicacion?

Sigo pensando que si puedo aumentar el tamaño maximo que puedo recibir seria mas efectivo

Si se recibe el caracter final. El tamaño maximo que recibe el sock a la vez es de 8192 bytes si no me equivoco, de igual forma hay veces que aunque tu envies esa cantidad de datos lo recibira por partes inferiores a 8192, he comprobado que esto solo sucede cuando estas conectado por internet pero si es local si se rciben los 8192 bytes.

Cita de: Drinky94 en 28 Febrero 2010, 13:41 PM
que tal si pruebas a enviar el archivo por partes?

salu2!

Vendria siendo lo mismo porque el cliente tendria que esperar hasta que arrive todo el archivo para poder analizarlo.
#98
Buenas, tal cual como dice nuestro amigo BlackZeroX▓▓▒▒░░ tu problema es con el buffer, antes de analizar los datos debes asegurarte de que todos los datos hallan llegado correctamente. Para esto yo te recomendaria poner algo como un caracter que finalize los datos, y mientras este caracter no llegue no analize los datos; ya que si los datos vienen incompletos por supuesto que te va a dar error tu aplicacion :P.

Un pequeño Ejemplillo:

Código (vb) [Seleccionar]

Private Sub SockClient_DataArrival(ByVal bytesTotal As Long)  
   Dim Datos As String
   Static Buffer As String

   SockListen.GetData Datos  
 
   Buffer = Buffer & Datos  

   If Right$(Buffer, 1) = "|" Then
       Buffer = Mid(Buffer, 1, Len(Buffer) - 1) ' Le quitamos el separador a los datos ya finalizados  
       Call Analizar(Buffer) 'Procedimiento que analiza los datos
       Buffer = "" ' Vaciamos el Buffer
   End If

End Sub
#99
No, no quiero el que tenga mas experiencia, quiero obtener la posicion del usuario segun su experiencia, asi como en el ejemplo que hize.
#100
Bueno mi inquietud es la de como obtener el rank (Posicion) de un usuario dentro de una determianada jerarquia, sabiendo que los datos estan en una base de datos access. Ejemplo: En la base de datos hay 10.000 usuarios cada uno con una determinada experiencia, quiero obtener la posicion del Usuario 3 ordenando de mayor a menor sin tener que hacer un "SELECT * FROM Users ORDER BY Experiencia" y tener que recorrer cada registro para obtener el indece del registro -.-

Usuario:              Experiencia:
Usuario 1            500
Usuario 2            358
Usuario 3            589
Usuario 4            955
Usuario 5            1254
Usuario 6            2121
Usuario 7            85
Usuario 8            159

"SELECT * FROM Users ORDER BY Experiencia DESC":

Usuario:              Experiencia:
Usuario 6            2121
Usuario 5            1254
Usuario 4            955
Usuario 3            589
Usuario 1            500
Usuario 2            358
Usuario 8            159
Usuario 7            85

Usuario 3 Posicion: 4

Actualmente lo hago de esta manera, pero hay que pedir todos los registros a la base de datos y quiera saber si hay otra forma:

Código (vb) [Seleccionar]
Private Function Obtener_Posicion()

   MiRecordset.Open "SELECT * FROM Users ORDER BY Experience DESC", MiConexion, adOpenDynamic, adLockOptimistic

   MiRecordset.MoveFirst
   MiRecordset.Find "Username = 'Usuario 7266'"

   If (MiRecordset.BOF = True) Or (MiRecordset.EOF = True) Then
       MsgBox "Usuario no encontrado"
       MiRecordset.Close
       Exit Function
   End If
   
   MsgBox MiRecordset.AbsolutePosition
   MsgBox MiRecordset.Fields("Experience")

   MiRecordset.Close

End Function