Hello,
Using slightly rewritten code from this Flash (not Flex) example, I’m able to login anonymous users and send messages to non-anonymous users successfully: AWESOME.
Challenge: Those anonymous users always appear offline, even though there’s good two-way conversations taking place. Here’s my code below. You can test if you have the files from the link above, replacing the actionscript in there. May I have someone critique this and tell me what might be going wrong?
Thanks a ton in advance!
Chris
import flash.events.Event; import com.yourpalmark.chat.ChatManager;
import com.yourpalmark.chat.data.LoginCredentials;
import com.pixelbreaker.ui.osx.MacMouseWheel; import mx.collections.ArrayCollection;
import mx.events.CloseEvent;
import mx.events.FlexEvent;
import mx.events.ListEvent;
import mx.managers.PopUpManager;
import mx.events.ResizeEvent; import org.igniterealtime.xiff.conference.Room;
import org.igniterealtime.xiff.core.EscapedJID;
import org.igniterealtime.xiff.core.UnescapedJID;
import org.igniterealtime.xiff.data.Message;
import org.igniterealtime.xiff.data.Presence;
import org.igniterealtime.xiff.data.im.RosterGroup;
import org.igniterealtime.xiff.data.im.RosterItemVO;
import org.igniterealtime.xiff.events.DisconnectionEvent;
import org.igniterealtime.xiff.events.IncomingDataEvent;
import org.igniterealtime.xiff.events.InviteEvent;
import org.igniterealtime.xiff.events.LoginEvent;
import org.igniterealtime.xiff.events.MessageEvent;
import org.igniterealtime.xiff.events.OutgoingDataEvent;
import org.igniterealtime.xiff.events.PresenceEvent;
import org.igniterealtime.xiff.events.RegistrationSuccessEvent;
import org.igniterealtime.xiff.events.RosterEvent;
import org.igniterealtime.xiff.events.XIFFErrorEvent; //import mx.controls.ComboBox;
import org.igniterealtime.xiff.core.XMPPConnection;
import flash.net.XMLSocket; var chatManager:ChatManager;
var messageDict:Dictionary;
//var roomPopup:RoomPopup; //var errorDataProvider:ArrayCollection = new ArrayCollection();
var logDataProvider:ArrayCollection = new ArrayCollection();
var presenceDataProvider:Array = [
{ label:"Online", data:Presence.SHOW_CHAT },
{ label:"Free To Chat", data:Presence.SHOW_CHAT },
{ label:"Away", data:Presence.SHOW_AWAY },
{ label:"Do Not Disturb", data:Presence.SHOW_DND },
{ label:"Extended Away", data:Presence.SHOW_XA }
]; var groupDataProvider:Array = [
{ label:"Buddies", data:"Buddies" },
{ label:"Work", data:"Work" },
{ label:"Family", data:"Family" }
]; setupChatManager(); function setupChatManager():void
{
chatManager = new ChatManager();
chatManager.addEventListener( DisconnectionEvent.DISCONNECT, onDisconnect );
chatManager.addEventListener( LoginEvent.LOGIN, onLogin );
chatManager.addEventListener( XIFFErrorEvent.XIFF_ERROR, onXIFFError );
chatManager.addEventListener( OutgoingDataEvent.OUTGOING_DATA, onOutgoingData );
chatManager.addEventListener( IncomingDataEvent.INCOMING_DATA, onIncomingData );
chatManager.addEventListener( PresenceEvent.PRESENCE, onPresence );
chatManager.addEventListener( MessageEvent.MESSAGE, onMessage );
chatManager.addEventListener( RosterEvent.USER_AVAILABLE, onUserAvailable );
chatManager.addEventListener( RosterEvent.USER_UNAVAILABLE, onUserUnavailable );
} connectButton.addEventListener(MouseEvent.CLICK,LoginNow);
function LoginNow(e){
connect();
} function connect():void
{ onServerInputChange();
onServerPortInputChange();
chatManager.connection.useAnonymousLogin = true;
chatManager.connection.resource = "flashPlayer"; var credentials:LoginCredentials = new LoginCredentials();
credentials.username = usernameInput.text;
credentials.password = passwordInput.text;
msgbox.text+=String("Connect? ");
chatManager.connect(credentials); } function onDisconnect( event:DisconnectionEvent ):void
{
msgbox.text+=String("User disconnected");
} function onLogin( event:LoginEvent ):void
{
msgbox.text+="Success:"+String(chatManager.currentUserJID);
setInterval(KeepActive,1000*60); var presence:Presence = new Presence(null, chatManager.connection.jid.escaped, null, "chat", "Nice day for a talk", 1);
chatManager.connection.send(presence); }
function KeepActive(){
//msgbox.text+="$"
chatManager.connection.sendKeepAlive();
} function onXIFFError( event:XIFFErrorEvent ):void
{
msgbox.text+="Error:"+String(event.errorMessage);
} function onOutgoingData( event:OutgoingDataEvent ):void
{
//msgbox.text+="onOutgoingData:"+event.data.toString();
//logDataProvider.addItem( ">>outgoing: " + event.data.toString() );
} function onIncomingData( event:IncomingDataEvent ):void
{
logDataProvider.addItem( ">>incoming: " + event.data.toString() );
} //chatManager.connection.sendKeepAlive(); function onPresence( event:PresenceEvent ):void
{ var presence:Presence = event.data[ 0 ] as Presence;
var presenceType:String; switch( presence.type )
{
case Presence.SHOW_CHAT :
case Presence.SHOW_AWAY :
case Presence.SHOW_DND :
case Presence.SHOW_XA :
presenceType = "Presence.AVAILABLE_TYPE";
break;
case Presence.UNAVAILABLE_TYPE :
presenceType = "Presence.UNAVAILABLE_TYPE";
break;
case Presence.UNSUBSCRIBE_TYPE :
presenceType = "Presence.UNSUBSCRIBE_TYPE";
break;
case Presence.PROBE_TYPE :
presenceType = "Presence.PROBE_TYPE";
break;
default :
break;
} //msgbox.text+="presenceType: "+presence.show;
} function onMessage( event:MessageEvent ):void
{
var message:Message = event.data as Message;
msgbox.text+="Message:"+" ["+String(event.data.from.bareJID)+ "] "+String(event.data.body);
} function onUserAvailable( event:RosterEvent ):void
{
msgbox.text+="User Available:"+event.jid;
//logDataProvider.addItem( "RosterEvent.USER_AVAILABLE: " + event.jid );
//callLater( updateLogScrollPosition );
} function onUserUnavailable( event:RosterEvent ):void
{
msgbox.text+="User Unavailable:"+event.jid;
//logDataProvider.addItem( "RosterEvent.USER_UNAVAILABLE: " + event.jid );
//callLater( updateLogScrollPosition );
} function onServerInputChange():void
{
ChatManager.serverName = serverInput.text;
} function onServerPortInputChange():void
{
ChatManager.serverPort = parseInt(serverPortInput.text);
} function onPresenceStateChange( event:ListEvent ):void
{ }
//////////////////////////////////
sendButton.addEventListener(MouseEvent.CLICK,sendMessageNow) function sendMessageNow(e){
sendMessage(toChat.text,msgTxt.text);
} function sendMessage(toId,str){
//fromId=new EscapedJID(fromId);
toId=new EscapedJID(toId);
var message:Message = new Message( toId, "Tester", null, null, Message.CHAT_TYPE, null );
message.from = chatManager.currentUserJID;
message.body = str;
message.state = "active"; //org.igniterealtime.xiff.data.ChatState: active, composing, paused, inactive, gone chatManager.connection.send(message);
}