[Gambas-user] MkXXX$() functions

Kevin Fishburne kevinfishburne at ...1887...
Sun Jan 16 19:14:37 CET 2011


On 01/16/2011 12:49 PM, Benoît Minisini wrote:
>> Yes, it seems you have convinced me. I have one final question however.
>> Currently a UDP packet is being received as a single string of mixed
>> datatypes. The recipient looks at the value of the first byte to
>> determine the type of packet. Here are some made-up examples of packet
>> contents:
>>
>> Byte=0, String=?, String=?
>> Byte=1, Short=?, Short=?, Float=?, Float=?, Byte=?, Byte=?
>> Byte=2, Byte=?, Byte=?, Float=?, Float=?
>>
>> The three packets have different total sizes and different datatype
>> patterns. The only reliable constant is that first identifying byte.
>> There are hundreds of packet types to minimize bandwidth, each one
>> tailored to a specific purpose.
>>
>> Is it possible for the recipient to load the UDP packet into a structure
>> without knowing which structure it needs to go in to? Basically, if I
>> know the first value in the structure is always a byte, can only that
>> byte be read before dumping the entire thing back into a structure?
> Yes.
>
> Reading and writing are not done the same way with UdpSocket.
>
> When you write a bunch of bytes, one Udp message is made from all the bytes
> and sent.
>
> When something is received from an Udp socket, the data is buffered, and you
> can read it with several READ instructions until EOF is raised.
>
> So, you can do:
>
> 	Public Struct Message0
> 	  ...
> 	End Struct
> 	
> 	Public Sub MyUdpSocket_Read
> 	
> 	  Dim iType As Integer
> 	
> 	  iType = Read #MyUdpSocket As Byte
> 	
> 	  Select Case iType
> 	    Case 0
> 	      ReadMessage0
> 	    Case 1
> 	      ReadMessage1
> 	    ...
> 	  End Select
> 	
> 	End
> 	
> 	Private Sub ReadMessage0()
> 	
> 	  Dim tMessage As Message0
> 	
> 	  tMessage = Read #MyUdpSocket As Message0
> 	  ...
> 	
> 	End
> 	
> 	...
>
>> And yes, I had my first Slashdot article posted yesterday. Ken at Ultima
>> Aiera said he got a record for hits to his site because of it...nice.
> Cool. :-)
>

That is extremely awesome. Thanks for the explanation and example code. 
I'll go ahead and start converting my code, so you'll get no trouble 
from me by removing the functions.

-- 
Kevin Fishburne
Eight Virtues
www: http://sales.eightvirtues.com
e-mail: sales at ...1887...
phone: (770) 853-6271





More information about the User mailing list