Differences

This shows you the differences between the selected revision and the current version of the page.

other:vicinity_php_code 2009/01/08 04:22 current
Line 1: Line 1:
 +<code php>
 +<html>
 +<head>
 +<title>Swarm - Vicinity Testing</title>
 +</head>
 +<body>
 +
 +<?php
 +
 +/* Tarim / April 2008 / for Swarm MediaSandbox Project */
 +
 +
 +
 +/* Tweak these to get the desired effects... */
 +
 +// Read in $db, $dbuser, $dbpasswd
 +include 'consts.php';
 +
 +// These are the boundaries on the range _squared_
 +$InnerRangeSquared = 3;
 +$OuterRangeSquared = 4;
 +
 +// The root and data elements around nearby output
 +$Root = 'document';
 +$Nearby = 'nearby';
 +$Device = 'device';
 +$Time = 'time';
 +
 +// Uncomment this to see the XML
 +// header("Content-Type: Text/Plain;");
 +
 +
 +
 +/* Define a few functions */
 +
 +// Return a get option if it exists, else null
 +function get_opt($key) {
 +  return array_key_exists($key, $_GET) ? $_GET[$key] : null;
 +}
 +
 +// Output the results of a query as XML
 +function xml_query($query, $element, $root) {
 +
 +  ($result = mysql_query($query)) || die("Select $element: " . mysql_error());
 +  if ($root) echo "<${root}>\n";
 +
 +  while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
 +    echo "  <${element}> ";
 +    foreach ($line as $name=>$value) {
 +      echo " <${name}>${value}</${name}>";
 +    }
 +    echo "  </${element}>\n";
 +  }
 +
 +  if ($root) echo "</${root}>\n";
 +  mysql_free_result($result);
 +}
 +
 +
 +/* Start the code for real */
 +
 +// Connect to database
 +mysql_connect(null, $dbuser, $dbpasswd) || die('Connect database: ' . mysql_error());
 +mysql_select_db($db) || die('Select database: ' . mysql_error());
 +
 +// if we are adding a player then insert row into Players and Connections
 +if($player = get_opt('add')) {
 +  $name = get_opt('name');
 +  $xpos = get_opt('x');
 +  $ypos = get_opt('y');
 +
 +  mysql_query("
 +    INSERT INTO Players ( Player, Name, Xpos, Ypos )
 +    VALUES (${player}, '${name}', ${xpos}, ${ypos})
 +  ") || die('Add player: ' . mysql_error());
 +
 +  mysql_query("
 +    INSERT INTO Connections ( Player1, Player2 )
 +    SELECT ${player} AS NewPlayer, Players.Player
 +    FROM Players
 +    WHERE Players.Player <> ${player}
 +  ") || die('Add connection: ' . mysql_error());
 +}
 +
 +// Delete player from players and connections tables
 +if ($player = get_opt('delete')) {
 +  mysql_query("
 +    DELETE FROM Players
 +    WHERE Players.Player = ${player}
 +  ") || die('Delete player: ' . mysql_error());
 +
 +  mysql_query("
 +    DELETE FROM Connections
 +    WHERE Connections.Player1 = ${player} OR
 +      Connections.Player2 = ${player}
 +  ") || die('Delete connection: ' . mysql_error());
 +}
 +
 +// Update connections table when there are new co-ordinates from a player
 +if (($player = get_opt('update')) || ($player = get_opt('add'))) {
 +  $xpos = get_opt('x');
 +  $ypos = get_opt('y');
 +
 +  mysql_query("
 +    UPDATE Players
 +    SET Xpos = ${xpos}, Ypos = ${ypos}
 +    WHERE Player = $player
 +  ") || die('Update player: ' . mysql_error());
 +
 +
 +  mysql_query("
 +    UPDATE (Connections
 +      INNER JOIN Players AS Players_1 ON
 +        Connections.Player1 = Players_1.Player)
 +      INNER JOIN Players AS Players_2 ON
 +        Connections.Player2 = Players_2.Player
 +      SET
 +        Connections.FirstContact = if(isnull(FirstContact), now(), null)
 +      WHERE
 +        (${player} = Connections.Player1 Or
 +        ${player} = Connections.Player2)
 +      AND
 +        ( (Players_1.Xpos - Players_2.Xpos)*(Players_1.Xpos - Players_2.Xpos)
 +        + (Players_1.Ypos - Players_2.Ypos)*(Players_1.Ypos - Players_2.Ypos)
 +        < if(isnull(FirstContact), ${InnerRangeSquared}, ${OuterRangeSquared}))
 +          = isnull(FirstContact)
 +    ") || die('Update connection: ' . mysql_error());
 +}
 +
 +if ($player = get_opt('update')) {
 +  xml_query("
 +    SELECT
 +      if($player = Player2, Player1, Player2) AS $Device,
 +      FirstContact AS $Time
 +    FROM Connections
 +    WHERE ($player = Player1 or $player = Player2) and not isnull(FirstContact)
 +    ORDER BY Player1, Player2
 +  ", $Nearby, $Root);
 +} else {
 +
 +  // Display the complete players table
 +  xml_query("SELECT * from Players ORDER BY Player", 'playerdata', 'pre');
 +
 +  // Display the complete connections table
 +  xml_query("SELECT * from Connections ORDER BY Player1, Player2", 'connections', 'pre');
 +}
 +
 +?>
 +
 +<hr/>
 +<address>Tarim / Vicinity for Swarm</address>
 +</body>
 +</html>
 +</code>
 
other/vicinity_php_code.txt · Last modified: 2009/01/08 04:22 by tarim
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki