One of the interesting and usefull feature in SmartFoxServer 
              Lite is the ability to send and receive complex data 
              structures (arrays, objects ...) very easily and transparently. 
            In this article we'll show you how this feature can really speed 
              up the process of creating complex multiuser applications and games. 
               
              [ DATA STRUCTURES ] 
              In the previous tutorial we concentrated our attention on the "User 
              Variables" and we've learnt how to use them. 
              "User variables" are very usefull when you want to store 
              settings for each client connected and have all the other users 
              receive notices about changes in those values. 
            There are cases in which this approach is not the best one, for 
              example in a turn-based game. 
              Classic turn based games can be board games (chess, connect 4 ...), 
              role play games, card games, strategy games etc... 
            Every time a user makes a move in a "connect 4" game 
              or in a "chess" game we don't really need to store that 
              move as a "User Variable". We would just need to be able 
              to send the move data to the other clients, without storing it anywhere. 
              One more example can be a multiuser whiteboard application: anytime 
              someone draws something on it we should just send the information 
              about the lines and curves that were drawn in a convenient format 
              and again no need to save that data. 
            The sendObject() method of the SmartFoxClient 
              API allows us to do this very easily, check this example: 
            
              - move = 
                new Object()
 
              - move.px 
                = 100
 
              - move.py 
                = 200
 
              - move.color 
                = "red"
 
              -  
 
              - sendObject(move)
 
              -  
 
             
               
              That's all :-)
            The other clients will receive an onObjectReceived 
              event: 
            - smartfox.onObjectReceived = function(obj, user)
 
- {
 
	- // do something cool here
  
- }
 
-  
  
             where obj is the object received and "user" 
              is the User object of the sender. 
            The following list represents the type of variables that can be 
              sent through the sendObject() method: 
            » object 
              » array 
              » number 
              » string 
              » boolean 
              » null 
            All the other variable types are ignored. 
            To give you an example that is a little more complex, imagine you're 
              playing an rpg game and you have to send some data 
              about you character: 
            
              - myChar = 
                new Object()
 
              - myChar.name 
                = "Tarkus"
 
              - myChar.position 
                = {px: 
                100, py:100}
 
              - myChar.inventory 
                = new 
                Array("knife", 
                "short sword", "long 
                sword", "hammer", "shield")
 -  
 
              - sendObject(myChar)
 
             
            As you can see you can nest other objects and arrays and create 
              pretty complex data structures. 
               
              In the next tutorial we'll use this feature to implement our first 
              simple multiplayer game. 
             
              [ WHAT'S BEHIND ] 
              It is not the purpose of this tutorial to show how this mechanism 
              works, however I'd like to discuss the basics of it in order to 
              better understand what's going on and how to get the best out of 
              it. 
            The process of sending and receiving structured Actionscript objects 
              is done through a serialization/deserialization mechanism. 
            To tell it in simple words your AS object is transformed in a more 
              convenient format (xml in our case) and sent to the server which 
              in turn will transmit the received data to the other users. As soon 
              as the client API receives the serialized data it will re-construct 
              the object and make it available to the application.  
            It's always important to take care of the amount of data that you're 
              sending and receiving. The more complex and nested is the structure 
              of your objects the more time it will take to send it through the 
              network and if you exceed with informations your application may 
              not respond as expected. 
            If your application/game is targeted to broadband users then this 
              should not be much of an issue, however slower modem connections 
              have limited bandwidth (4 to 7 KB/s) and you will also have to deal 
              with the inevitable lag of internet connections. 
            Also if you waste bandwidth by sending unnecessary data you will 
              steal bandwidth to other users connected to the server and if you 
              saturate it the general performance of the clients connected will 
              deteriorate. 
            The previous rpg game example should not give problems to slower 
              modem connections, however it can be optimized efficiently by 
              replacing those strings in the inventory array with numeric ids. 
            
              - myChar = 
                new Object()
 
              - myChar.name 
                = "Tarkus"
 
              - myChar.position 
                = {px: 
                100, py:100}
 
              - myChar.inventory 
                = new 
                Array(1, 
                2, 3, 
                4, 5)
 -  
 
              - sendObject(myChar)
 
             
            where 1,2,3,4,5 represent the various inventory items. 
            You can save about 30 bytes by using this new object. Doesn't sound 
              like it's so much ? 
              Well think about having 100 connected users and you're saving 3KB/s 
              (24Kb/s) of bandwith and if the users were 1000 you 
              would be saving 240kb/s ... that's almost half of a DSL connection, 
              not that bad! :-) 
            Now that we have seen the theory behind sending and receiving Actionscript 
              data through the SmartFoxServer it's time to put 
              this new knowledge to work in a real world example. 
            In the next tutorial you will find a complete simple game of Tic-Tac-Toe. 
            Have fun! :-) 
            Lapo 
             |