I got it. so this is what I'll do:
A> txt 10240
B> (malloc ptrAltogether 10240 bytes; Let sizeRemain = 10240;sizeDone=0)
sendtxt
A> "010010101010101......."
B> (First packet is ready:
var ptrTemp: array[0..MAX_PACK] of char;
Zero(ptrTemp);
if(sizeThisPack = Receive(ptrTemp) > 0)
{
sizeRemain -= sizeThispack;
sizeone += sizeThisPack;
copy memory( from ptrTemp to "ptrReceive+sizeDone",
size=sizeThisPack);
}
A> ".......01010101"
B> (Last packet is ready
(Do all t he memory copying as above...
this time, add the followings:
generate hash, verify
call a "Callback function" to notify the user, while passing the
pointer to him
So my question is..
first, for the "ptrTemp". (1) What is the best number , i.e. a number
that gaurentee it is not to o small, while not occupying too much
memory? (2) Second, is it better to have ptrTemp as a local variable
inside OnDataAvailable()? OR is it better to have it as a global
variable? Third, is it etter to :
have ptrTemp as a pointer only,
GetMem for "ptrTemp" right at the beginning, then
Free it at the very last?
or
have ptrTemp as a fixed size buffer determined at design time, and have
it locally in OnDataAvailable?
Thanks!
Wilfried Mestdagh wrote:
>Hello David,
>
>
>
>>So I ignored the zero und -1 returned by the Receive(), and it worked :)
>>
>>
>
>Great ! I'm glad it works for you :)
>
>
>
>>But the "TempSize" in my code was never changed. it was set as to a
>>constant value en the constructor.
>>
>>
>
>Ok no problem then. But if your buffer has a constant size, then wy not
>put it on the stack like this:
>var
> Buffer: array[0..TempSize] of char;
>begin
> // receive in buffer
>
>
>
>>decrease the GetMem(), Free() as much as possible.. so I think I'll do
>>it before the first request, and free it after the last request...
>>
>>
>
>Yes that's another option. Then you only have 1 time allocation, but see
>paragraph above.
>
>
>
>>for reassembling the original stream, what do you think ? "consecutive
>>Realloc()" (First scenario) or "Array of pointer" (Second scenario)?
>>
>>
>
>Difficult to say wahts best because it is depending on what you exacly
>wants or have to do with it.
>
>- if you have to save it to a file then you can:
> - open the file at first packet
> - receive in buffer
> - write buffer direkt to file
> - close file at last packet
> -- the most fast is to use the low level routines: FileOpen(), etc...
>
>- TFileStream is another option, somewhat slower
>
>- if you have to do other things with it then you can
> - use a TMemoryStream
> - or a dynamicly allocate buffer that you take care yurself
>
> Both of course will reallocate when data grow, however you can for
> both options set the size at first, then also only 1 memallcoation and
> no reallocation.
>
>- array of pointer seems more difficult. Dont think you will have
> advantage using it.
>
>---
>Rgds, Wilfried [TeamICS]
>http://www.overbyte.be/eng/overbyte/teamics.html
>http://www.mestdagh.biz
>
>
>
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be