Page 1 sur 1
CompressMemory!!
Publié : sam. 18/mai/2013 14:31
par Fortix
Salut
Dommage qu'il n'y ait pas d'exemple concernant "CompressMemory"
Code : Tout sélectionner
Resultat = CompressMemory(*MemoireTampon, Taille, *Sortie, SortieTaille [, PluginID])
*Sortie

cela signifierait qu'il faut alloué une autre zone mémoire??
dans l'un des paramètre il faut spécifier une taille de sortie
celle qu'on veut
là franchement si vous pouvez m'aider

Re: CompressMemory!!
Publié : sam. 18/mai/2013 18:51
par G-Rom
je ne connaissait pas ces fonctions , mais un coup de doc est clair :
Code : Tout sélectionner
UseLZMAPacker()
*Memory = AllocateMemory( 4 * 512 )
*Compressed = AllocateMemory( 4 * 512 )
*UnCompressed = AllocateMemory( 4 * 512 )
For i = 0 To 512-1
PokeL(*Memory + (i*4) ,512)
Next
size = CompressMemory(*Memory,MemorySize(*Memory), *Compressed, MemorySize(*Compressed),#PB_Packer_LZMA)
*Compressed = ReAllocateMemory(*Compressed,size)
Debug MemorySize(*Compressed)
Debug UncompressMemory(*Compressed,MemorySize(*Compressed),*UnCompressed,MemorySize(*UnCompressed),#PB_Packer_LZMA)
Debug PeekL(*UnCompressed)
Re: CompressMemory!!
Publié : sam. 18/mai/2013 19:42
par Fortix
Salut @G-Rom
sa bloque dans "ReAllocateMemory"
mais pour le cas de "SendNetworkData()" et "ReceiveNetworkData()"
est-il concevable de compresser la zone mémoire puis d'envoyer??
Re: CompressMemory!!
Publié : sam. 18/mai/2013 20:15
par G-Rom
Complètement , tout dépends de la trame que tu envois , de l'udp , tout tes paquets doivent faire la même taille.
mais rien ne t'empêche de compresser les données.
pour le bloquage , que vaut size ?
Re: CompressMemory!!
Publié : sam. 18/mai/2013 21:39
par Fortix
Désolé de te répondre seulement maintenant
size m'indique 0
pourtant sa devrais fonctionner car tes calculs me paraissent correctes

Re: CompressMemory!!
Publié : sam. 18/mai/2013 22:54
par G-Rom
la compression à échoué chez toi , a voir avec un autre compresseur.
Re: CompressMemory!!
Publié : dim. 19/mai/2013 1:26
par Fortix
j'ai repéré l'erreur, en fait il faut un fichier ou un chiffre suffisamment volumineux
pour que la compression puisse se faire sinon il indique 0
mais concernant "ReceiveNetworkData()" j'utilise principalement TCP et
mes packets sont en général à 1000 octets par arrivages!
là où j'ai du mal à comprendre, où doit on placer "UncompressMemory()"
avant ou après "ReceiveNetworkData()"??
Re: CompressMemory!!
Publié : dim. 19/mai/2013 10:51
par G-Rom
plusieurs choses, avec tcp , tu envois 1000 bytes , tu peu les recevoir en plusieurs fois ( dans l'ordre ) , en local tu n'auras pas ce problème , les paquets passe par la même route , ce qui n'est pas le cas sur le net.
pour la compression : tu compresses avant d'envoyer , t'envois, tu reçois , tu décompresses.
Re: CompressMemory!!
Publié : dim. 19/mai/2013 11:47
par Fortix
Donc je décompresse packet par packet?
Re: CompressMemory!!
Publié : dim. 19/mai/2013 11:56
par G-Rom
oui , mais je m'y prendrais autrement , càd que je collerais quand même un bit d' identification au paquet :
paquet :
[ BIT ID ] [DATA SIZE] [ DATA ]
Re: CompressMemory!!
Publié : dim. 19/mai/2013 12:44
par Fortix
cette notion me dépasse
pourquoi ne pas décompresser directement les packets?
Re: CompressMemory!!
Publié : dim. 19/mai/2013 13:08
par G-Rom
si cela te dépasse , descend d'un cran, le réseau est complexe tout de même , cherche des articles sur le net à ce sujet.
Tes applications vont communiqué entre elles , elles doivent savoir , quand elle reçoivent des données , de quoi il en retourne , par exemple , si ton application
envois des fichiers wav ou bmp par exemple , comment tu vas savoir à quel type de fichier tu as à faire ? Avec un bit d'identification :
si tu ne comprends pas les pointeurs , les peek poke, je te suggère d'aller fouiller les tutos sur le forum , car il faut maîtrisé un minimum.
Code : Tout sélectionner
*DataCompressed = AllocateMemory(512) ; <- remplace par une compression réel
Enumeration
#FILE_WAVE
#FILE_BITMAP
EndEnumeration
*Packet = AllocateMemory(1+4+MemorySize(*DataCompressed)) ; 1 = offset du bit , 4 = offset de la taille
PokeA(*Packet,#FILE_WAVE)
PokeL(*Packet+1,MemorySize(*DataCompressed))
CopyMemory(*DataCompressed,(*Packet+1+4),SizeOf(*DataCompressed))
; SendNetworkData(clientID,*Packet,MemorySize(*Packet))
Re: CompressMemory!!
Publié : dim. 19/mai/2013 13:56
par Fortix
Très sage recommandation
à ce propos, pour le type de fichier j'utilise une méthode
peu académique voir même hérétique de l'informatique
figures toi que j’envoie dans un 1ère temps un "SendNetworkString"
qui se charge de renseigner un maximum sur le Body à venir
par exemple le nom,poids,etc...
je sais c'est très null, mais comme on dit "système D"
en revanche sa marche très bien
mais je t’avoue que j'éprouve un certain mal être quand j'utilise
cette méthode

, et que je souhaiterais en réalité
apprendre la vrai seul méthode, celle qu'utilisent touts les
autres logiciels PtoP
en touts cas merci pour m'avoir tendu la perche
Re: CompressMemory!!
Publié : dim. 19/mai/2013 14:23
par G-Rom
ton système n'est pas bon , comment fait tu pour différencier l'arrivé d'un string & de data ? , tu ne peu pas le prévoir , imagine que l'utilisateur à son pc qui plante entre l'envois du string et des data , ton serveur attendra des data , alors que l'utilisateur qui relance le programme renverra un string. plantage en perspective. il faut des paquets standard , avec un bit d'id en tête, un peu comme un header de fichier d'ailleurs.
Entraîne toi à manipuler de la mémoire , un bon exercice c'est de manipuler des tableaux de pixel (2d) dans une mémoire linéaire.
*pixels = allocateMemory ( taillex * tailley * 4 ) ; 4 = couleurs RGBA
Quand tu sauras faire cela , tu pourras tout faire en programmation, c'est pas très compliqué.

Re: CompressMemory!!
Publié : dim. 19/mai/2013 18:57
par Fortix
oui il est vrai que j'ai de grande lacune concernant l'utilisation de la mémoire
et sur bien d'autre choses d’ailleurs
je jette un œil dans le tuto puis on verra par la suite
