Topic: Comet Streaming plugin 0.2.2

Hi y'all,

I've made a small hotfix release and fixed some small compatibility issues with 0.5rc2. There are no new features included.
Let me know if you experience any problems.

demo
download

Re: Comet Streaming plugin 0.2.2

tried installing it.   doesn't work for me.  Safari, Mac OSX.

i get the following error.

PHP Fatal error:  Cannot redeclare class xajaxRequestPlugin in /Applications/MAMP/htdocs/xajax/xajax_core/xajaxPlugin.inc.php on line 102

i used the following setup:

<?php
require_once '../xajax/xajax_core/xajax.inc.php';
require_once '../xajax/xajax_core/xajaxPlugin.inc.php';
require_once '../xajax/xajax_core/xajaxPluginManager.inc.php';
require_once '../xajax/xajax_core/xajaxResponse.inc.php';
require_once '../xajax/xajax_plugins/response/comet/comet.inc.php';
require_once '../smarty/Smarty.class.php';

require_once 'connections/local.php';
require_once 'php/utility.php';
require_once 'classes/base.php';
require_once 'classes/dependent.php';
require_once 'classes/user.php';

session_start();

$xajax = new xajax("xxx.server.php");
$xajax->registerFunction('test');
$xajax->registerFunction('loginForm');
//$xajax->register(XAJAX_FUNCTION, 'testComet', array("comet" => true));

$xajax->setCharEncoding('ISO-8859-1');
$xajax->setFlag('decodeUTF8Input', true);
$xajax->setFlag('debug', true);

$smarty = new Smarty;
?>

Re: Comet Streaming plugin 0.2.2

Ok so I looked at a previous version to set it up correctly

<?php

ini_set("display_errors",1);
error_reporting(E_ALL ^E_NOTICE);
 
$core = '../xajax/xajax_core';
require_once $core . '/xajax.inc.php';
 
$xajax = new xajax("airline_support.server.php");

require_once $core . '/xajaxPlugin.inc.php';
require_once $core . '/xajaxPluginManager.inc.php';
require_once '../xajax/xajax_plugins/response/comet/comet.inc.php';

require_once '../smarty/Smarty.class.php';

require_once 'connections/local.php';
require_once 'php/utility.php';
require_once 'classes/base.php';
require_once 'classes/dependent.php';
require_once 'classes/user.php';

session_start();

$xajax->configure("javascript URI","/xajax/");

$xajax->registerFunction('test');
$xajax->registerFunction('loginForm');

$xajax->register(XAJAX_FUNCTION,"testComet",array("comet" => true));
$xajax->register(XAJAX_FUNCTION,"testNormal");

$xajax->setCharEncoding('ISO-8859-1');
$xajax->setFlag('decodeUTF8Input', true);
//$xajax->setFlag('debug', true);

$smarty = new Smarty;
?>

now the only issue I have is that comet does not work with the debug menu

i get that the URL for debug.js is not found, etc.

Re: Comet Streaming plugin 0.2.2

I was searching the net for using comet technique with php and found out this plugin. Great work.
But can you please give an example of:
Suppose a function "getdata" retreives something from the database and returns a string "datastring". How can I can I use comet plugin to display that string in the div so that the div only refreshes when there's some change in data?

Re: Comet Streaming plugin 0.2.2

One thing I want to ask, when running the demo from:
   http://xajaxproject.org/developer/q_no/Comet/comet.php
After clicking on start button if I click the Escape key, it does not stop and continues to run until finished.
But when I downloaded the demo from:
    http://xajaxproject.org/developer/q_no/Comet/Comet.zip
and executed it locally, after pressing the start button if I press the Escape key, the scrip stops.
Can you please tell me how the script does not stop when executed from http://xajaxproject.org/developer/q_no/Comet/comet.php?

Re: Comet Streaming plugin 0.2.2

Works fine for me, smughal! (Using Firefox)

7 (edited by Goodwill 2009-01-08 3:29:24 PM)

Re: Comet Streaming plugin 0.2.2

Comet doesnt work in IE 6 with xajax RC2 (using compiled version), throwing error context is null. Xajax files in your package are not from RC2 so it works well in IE 6. Got comet.js from online demo, that worked with latest RC2.

Re: Comet Streaming plugin 0.2.2

dickdock wrote:

Works fine for me, smughal! (Using Firefox)

Ok. I executed it (both links) in firefox and after pressing the Start button if escape is pressed, the script stops. What if I don't want it to be stopped? The idea is that the script will continuously check a table from database if any new record is added in it, if yes then some action will be performed. I want to do it using comet streaming. So if the script is running and someone presses escape then the script will stop. How to make it Not stop?
Thank you.

Re: Comet Streaming plugin 0.2.2

Oh, I see, interesting question. I think you have to deal with preventing the escape key yourself. Below is a test script that uses jquery to discard escapes. I've tried it on Firefox and IE6 (on Ubuntu/Wine) and it works ok but I'm not sure of side-effects.

To Goodwill: Thanks for pointing out that one needs to use http://xajaxproject.org/developer/q_no/ … t/comet.js or http://xajaxproject.org/developer/q_no/ … pressed.js for comet to work under IE, rather than the version in the download zip - it flummoxed me until I read your post.

<?php

define('DM_AJAX_URI_PATH', '/dm/_/include/'); // NOTE: Change for your system.
define('DM_AJAX_FULLDIR', '/var/dm/xajax/xajax_core/');  // NOTE: Change for your system.
require DM_AJAX_FULLDIR . 'xajax.inc.php';
require_once DM_AJAX_FULLDIR . 'xajaxPluginManager.inc.php';
require_once DM_AJAX_FULLDIR . 'xajaxResponse.inc.php';
require_once DM_AJAX_FULLDIR . '../xajax_plugins/response/comet/comet.inc.php';

error_log("begin {$_SERVER['PHP_SELF']}");

function testComet () {
    $objResponse = new xajaxCometResponse(0.3);

    for ($i = 1; $i <= 10; ++$i) {
        $objResponse->assign("progress","style.width",($i*5)."px");
        $objResponse->assign("streaming","innerHTML",($i*5).'%');
        $objResponse->flush();
    }
    $objResponse->assign("progress","style.width",($i*5)."px");
    $objResponse->assign("streaming","innerHTML",($i*5).'%');
    $objResponse->alert("finished process at ".($i*5)."%.");
    return $objResponse;
}

$xajax = new xajax;
$xajax->configure('javascript URI', DM_AJAX_URI_PATH);
$xajax->register(XAJAX_FUNCTION, "testComet", array("comet" => true));
$xajax->processRequest();

error_log("end {$_SERVER['PHP_SELF']}");

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>Test comet</title>
<?php
$xajax->printJavascript();
?>
<script type="text/javascript" src="/dm/_/include/jquery/jquery-1.2.6.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $('body').keydown(function (e) { if (e.which == 27) return false; });
});
</script>
</head>
<body>
<input type="button" onclick="xajax_testComet();" value="start comet" />
<div id="progress" style="width:1px;background:red;border:1x solid darkred">
    <div id="streaming"></div>   
</div>
<div id="debug"></div>
</body>
</html>

Re: Comet Streaming plugin 0.2.2

hello i try to using comet but form me doesn't work
i use firefox 3.0 and xajax 5.0 and Comet Streaming plugin 0.2.2
with ie 7 comet work

Re: Comet Streaming plugin 0.2.2

Just had a problem with Comet and Internet Explorer 8.  I was getting this error:

Message: 'context' is null or not an object
Line: 130
Char: 215
Code: 0
URI: http://mydomain.com/xajax/xajax_js/xajax_core.js

I fixed this error by adding an "if" statement in, like so:

if(obj.context){obj.context=oRequest.context;}

Works like a charm now.

Re: Comet Streaming plugin 0.2.2

Never had a problem with xajax or comet plugin.  but I am now.

Seems that I am getting an invalid url error.  I don't know why.  The script works just fine on another site.  for the site with the error it works fine in firefox and chrome.  But not in IE8.

I am getting to this point in the comet.js file

xjxEc.connect_htmlfile=function(url,callback,oRequest){try{xjxEc.transferDoc=new ActiveXObject("htmlfile");xjxEc.transferDoc.open();xjxEc.transferDoc.write("<html>");xjxEc.transferDoc.write("<script>document.domain='http://192.168.1.21/';</script>");xjxEc.transferDoc.write("</html>");xjxEc.transferDoc.close();xjxEc.ifrDiv=xjxEc.transferDoc.createElement("div");xjxEc.transferDoc.body.appendChild(xjxEc.ifrDiv);xjxEc.ifrDiv.innerHTML="<iframe src='"+url+"'></iframe>";xjxEc.transferDoc.callback=function(response){callback(response,oRequest);};}
catch(ex){}
}

That appears to be where it chokes.  It doesn't like the document.domain.  Any ideas?

Re: Comet Streaming plugin 0.2.2

I am having a problem with IE working with Comet.  I don't know if this is the problem but I don't know why this is like this. 

On line 276 of the comet_uncompressed.js  the code shows non existant address.  This is a private address.

        xjxEc.transferDoc.write("<script>document.domain='http://192.168.1.21/';</script>");

Is this an issue?

Re: Comet Streaming plugin 0.2.2

Hey Guys.

Firstly, I'm very glad xajax exists, and we are all very fortunate to have people like you developping such good software frameworks!

I've got a problem with the comet plugin, its not flushing the content! I just get the result output. (like 55% in the demo)
The Demo is not working after uploading it 1/1 and correcting the few errors its got.

Can you give me a hint why not even the demo is working?! some special settings additionaly needed to the demo?

Regards, Graem

Re: Comet Streaming plugin 0.2.2

Well we've narrowed this problem down to the php settings of the server! Something must be blocking flush or caching the output until the connection is closed.

I think maybe a few others will be affected by this due to different server settings!

Anybody got a clue what is blocking it?

Until now we've got possible evils:
suhosin
mod_security

Regards, Graem

Re: Comet Streaming plugin 0.2.2

I have a problem with comet queuing up the xajax php script calls.

i have the latest version of xajax and comet plugin.

i also am running sessions, with file-based sessions in php.

i primarily do this with xampp under windows, and also for my live server.

i was trying to write a chat client, for registered users, so i need the session information.

am i correct in assuming the plugin doesnt work with file-based sessions?

any workarounds? (i dont know how easy it would be to alter the sessions)

Re: Comet Streaming plugin 0.2.2

pitstopboss wrote:

I have a problem with comet queuing up the xajax php script calls.

i have the latest version of xajax and comet plugin.

i also am running sessions, with file-based sessions in php.

i primarily do this with xampp under windows, and also for my live server.

i was trying to write a chat client, for registered users, so i need the session information.

am i correct in assuming the plugin doesnt work with file-based sessions?

any workarounds? (i dont know how easy it would be to alter the sessions)

Hi,

you can either call session_write_close(); / session_start(); in a loop or change your session handler to mysql or memcached. I'd suggest you to use memcached - it's the quickest solution for your case.