Page 1 sur 1

CompressMemory!!

Publié : sam. 18/mai/2013 14:31
par Fortix
Salut :D

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 :D

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 :D

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 :wink:
size m'indique 0 :lol:

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 :wink:

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 :lol:
:?
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 :wink:

à ce propos, pour le type de fichier j'utilise une méthode
peu académique voir même hérétique de l'informatique :lol:
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... :lol:

je sais c'est très null, mais comme on dit "système D" :oops:
en revanche sa marche très bien :wink:

mais je t’avoue que j'éprouve un certain mal être quand j'utilise
cette méthode :oops: , et que je souhaiterais en réalité
apprendre la vrai seul méthode, celle qu'utilisent touts les
autres logiciels PtoP :D

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
:lol:

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 :cry:

je jette un œil dans le tuto puis on verra par la suite :D