A Flash Developer Resource Site

Results 1 to 5 of 5

Thread: communication between 2 movies via server & PHP ?

  1. #1
    Senior Member
    Join Date
    Jan 2004
    Posts
    171

    communication between 2 movies via server & PHP ?

    Hi

    I'm fairly experienced in Flash (well, I was up to Flash 8) and very strong in PHP but now I need to do something I've never had to do and I don't know quite how to go about setting it up.

    I've made a small movie that lets you scribble on a canvas using lineStyle(), moveTo(), lineTo() etc in a new clip

    my first question is : is there a more recent way of doing this or are those functions still a good way to draw at runtime ?

    then, what I would really like to do is have 2 people using the same movie in their browser and when they draw in one it gets updated in the other one. The movie being drawn in would have to send the data to the other movie via the site server.

    what is the best way of going about this ? is there already a system that would simplify this ?

    if you know of any existing examples i could look at, or point me in the right direction I would be more than grateful

    thanks

  2. #2
    Registered User
    Join Date
    Feb 2001
    Posts
    13,041
    Hi,

    if instantaneous update is important, you will need to run a socket server. This is potentially possible in php, but likely to not work on a standard shared webserver.
    So you are in fact looking for someone hosting adobe server, red5, or whatever

    If you think you can go with polling the server for updates every 10 seconds, you can use a standard php server

    Musicman

  3. #3
    Senior Member
    Join Date
    Jan 2004
    Posts
    171
    thanks for your reply

    I'll be putting the site on a pair of dedicated servers so socket server sounds interesting - I'll check that out

    thanks

  4. #4
    Programmer
    Join Date
    Aug 2007
    Posts
    173
    yea socket server is your best bet.

    if i was to do something like this i would make it so the swf creates an array of positions onMouseMove when drawing is true, and sends them on a set interval of say 100ms and then clears the array once sent.

    ---
    here is a nice PHP socket server example i use to use as a base template.

    PHP Code:
    #!/usr/local/bin/php -q
    <?php

    set_time_limit
    (0);


    // defaults...

    define('MAXLINE'1024);        // how much to read from a socket at a time
    define('LISTENQ'10);          // listening queue
    define('PORT'10000);          // the default port to run on
    define('FD_SETSIZE'5);        // file descriptor set size (max number of
    concurrent clients)...


    // for kill the biatch...

    function killDaemon()
    {
        global 
    $listenfd$client;

        
    socket_close($listenfd);
        
    $msg "Daemon going down!\n";
        for (
    $i 0$i FD_SETSIZE$i++)
        {
            if (
    $client[$i] != null)
            {
                
    socket_write($client[$i], $msgstrlen($msg));
                
    socket_close($client[$i]);
            }
        }

        print 
    "Shutting down the daemon\n";
        exit;
    }


    // whenever a client disconnects...

    function closeClient($i)
    {
        global 
    $client$remote_host$remote_port;

        print 
    "closing client[$i] ({$remote_host[$i]}:{$remote_port[$i]})\n";

        
    socket_close($client[$i]);
        
    $client[$i] = null;
        unset(
    $remote_host[$i]);
        unset(
    $remote_port[$i]);
    }


    // set up the file descriptors and sockets...

    // $listenfd only listens for a connection, it doesn't handle anything
    // but initial connections, after which the $client array takes over...

    $listenfd socket_create(AF_INETSOCK_STREAM0);
    if (
    $listenfd)
        print 
    "Listening on port " PORT "\n";
    else
        die(
    "AIEE -- socket died!\n");

    socket_setopt($listenfdSOL_SOCKETSO_REUSEADDR1);
    if (!
    socket_bind($listenfd"0.0.0.0"PORT))
    {
        
    socket_close($listenfd);
        die(
    "AIEE -- Couldn't bind!\n");
    }
    socket_listen($listenfdLISTENQ);


    // set up our clients. After listenfd receives a connection,
    // the connection is handed off to a $client[]. $maxi is the
    // set to the highest client being used, which is somewhat
    // unnecessary, but it saves us from checking each and every client
    // if only, say, the first two are being used.

    $maxi = -1;
    for (
    $i 0$i FD_SETSIZE$i++)
        
    $client[$i] = null;


    // the main loop.

    while(1)
    {
        
    $rfds[0] = $listenfd;

        for (
    $i 0$i FD_SETSIZE$i++)
        {
            if (
    $client[$i] != null)
                
    $rfds[$i 1] = $client[$i];
        }


        
    // block indefinitely until we receive a connection...

        
    $nready socket_select($rfds$null$nullnull);


        
    // if we have a new connection, stick it in the $client array,

        
    if (in_array($listenfd$rfds))
        {
            print 
    "listenfd heard something, setting up new client\n";

            for (
    $i 0$i FD_SETSIZE$i++)
            {
                if (
    $client[$i] == null)
                {
                    
    $client[$i] = socket_accept($listenfd);
                    
    socket_setopt($client[$i], SOL_SOCKETSO_REUSEADDR1);
                    
    socket_getpeername($client[$i], $remote_host[$i],
    $remote_port[$i]);
                    print 
    "Accepted {$remote_host[$i]}:{$remote_port[$i]} as
    client[
    $i]\n";
                    break;
                }

                if (
    $i == FD_SETSIZE 1)
                {
                    
    trigger_error("too many clients"E_USER_ERROR);
                    exit;
                }
            }
            if (
    $i $maxi)
                
    $maxi $i;

            if (--
    $nready <= 0)
                continue;
        }


        
    // check the clients for incoming data.

        
    for ($i 0$i <= $maxi$i++)
        {
            if (
    $client[$i] == null)
                continue;

            if (
    in_array($client[$i], $rfds))
            {
                
    $n trim(socket_read($client[$i], MAXLINE));

                if (!
    $n)
                    
    closeClient($i);
                else
                {
                    
    // if a client has sent some data, do one of these:

                    
    if ($n == "/killme")
                        
    killDaemon();
                    else if (
    $n == "/quit")
                        
    closeClient($i);
                    else
                    {
                        
    // print something on the server, then echo the incoming
                        // data to all of the clients in the $client array.

                        
    print "From {$remote_host[$i]}:{$remote_port[$i]},
    client[
    $i]: $n\n";
                        for (
    $j 0$j <= $maxi$j++)
                        {
                            if (
    $client[$j] != null)
                                
    socket_write($client[$j], "From client[$i]:
    $n\r\n");
                        }
                    }
                }

                if  (--
    $nready <= 0)
                    break;
            }
        }
    }

    ?>
    Freelance: AS2, AS3, PHP, MySQL, JavaScript
    Skype: hunty93

  5. #5
    Senior Member
    Join Date
    Apr 2004
    Location
    LA
    Posts
    349
    I've written just such a socket server. See the link in my sig.
    Write multiplayer games with FlashMOG 0.3.1
    Try the MyPlan Salary Calculator

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  




Click Here to Expand Forum to Full Width

HTML5 Development Center