⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jwchat.html

📁 WEB IM 实现 j2ee项目的IM功能 可继承到现有的系统当中
💻 HTML
📖 第 1 页 / 共 4 页
字号:
	  x.setAttribute('type','submit');	  	  con.send(iq);	}	break;      case '303': // nick change	// display message	if (!ouser.nick)	  return;		var aMessage = new JSJaCMessage();	aMessage.setFrom(user.jid);	aMessage.setBody(""+ouser.name+" is now known as "+htmlEnc(ouser.nick));	user.chatmsgs = user.chatmsgs.concat(aMessage);	if (user.chatW && !user.chatW.closed && user.chatW.popMsgs)	  user.chatW.popMsgs();		// update nick if it's me	if (ouser.name == htmlEnc(user.roster.nick))	  user.roster.nick = ouser.nick;		// remove old user	var aChatW = ouser.chatW;	user.roster.removeUser(ouser);		// add new user	ouser = new GroupchatRosterUser(presence.getFrom().substring(0,presence.getFrom().lastIndexOf('/')+1).concat(ouser.nick),ouser.nick);		if (aChatW && !aChatW.closed) {	  ouser.chatW = aChatW;	  ouser.chatW.user = ouser;	}	user.roster.addUser(ouser);	nickChanged = true;	break;      case '301': // user has been kicked	var aMessage = new JSJaCMessage();	aMessage.setFrom(user.jid);	var body;	if (ouser.actor)	  body = ""+ouser.name+" has been banned by "+ouser.actor;	else	  body = ""+ouser.name+" has been banned";	if (ouser.reason)	  body += ": " + ouser.reason;	aMessage.setBody(body);	user.chatmsgs = user.chatmsgs.concat(aMessage);	if (user.chatW && !user.chatW.closed && user.chatW.popMsgs)	  user.chatW.popMsgs();					playSound('chat_recv');	break;      case '307': // user has been kicked	var aMessage = new JSJaCMessage();	aMessage.setFrom(user.jid);	var body;	if (ouser.actor)	  body = ""+ouser.name+" has been kicked by "+ouser.actor;	else	  body = ""+ouser.name+" has been kicked";	if (ouser.reason)	  body += ": " + ouser.reason;	aMessage.setBody(body);	user.chatmsgs = user.chatmsgs.concat(aMessage);	if (user.chatW && !user.chatW.closed && user.chatW.popMsgs)	  user.chatW.popMsgs();			playSound('chat_recv');	break;      }    }        Debug.log("<"+ouser.name+"> affiliation:"+ouser.affiliation+", role:"+ouser.role,3);    if (!user.roster.getUserByJID(presence.getFrom()) && !nickChanged) {      // add user      user.roster.addUser(ouser);            // show join message      var aMessage = new JSJaCMessage();      aMessage.setFrom(user.jid);      aMessage.setBody(""+ouser.name+" has become available");      user.chatmsgs = user.chatmsgs.concat(aMessage);      if (user.chatW && !user.chatW.closed && user.chatW.popMsgs)	user.chatW.popMsgs();			            playSound('online');          } else if (presence.getType() == 'unavailable' && !nickChanged) {      // show part message      var aMessage = new JSJaCMessage();      aMessage.setFrom(user.jid);      var body = ""+ouser.name+" has left";      if (presence.getStatus())	body += ": " + presence.getStatus();      aMessage.setBody(body);      user.chatmsgs = user.chatmsgs.concat(aMessage);      if (user.chatW && !user.chatW.closed && user.chatW.popMsgs)	user.chatW.popMsgs();			            playSound('offline');          } else      user.roster.updateGroups();        // relink roster and user    aRoster = user.roster;    user = ouser;  }   if (show) {    if (user.status == 'unavailable')      playSound('online');    // fix broken pressenc status    if (show != 'chat' && show != 'away' && show != 'xa' && show != 'dnd')      show = 'available';    user.status = show;  } else if (type) {    if (type == 'unsubscribe') {      user.subscription = 'from';      user.status = 'stalker';    } else if (user.status != 'stalker')      user.status = 'unavailable';    if (aRoster.name == 'GroupchatRoster' && !nickChanged) { // it's a groupchat roster      // remove user      if (!user.chatW || user.chatW.closed)	aRoster.removeUser(user); // we don't need offline users in there    }    playSound('offline');  } else {    if (user.status == 'unavailable') // user was offline before      playSound('online');    user.status = 'available';  }  var img = eval(user.status+"Led");    if (user.lastsrc) // message is pending    user.lastsrc = img.src;    // show away message  if (status)    user.statusMsg = status;  else    user.statusMsg = null;    // update presence indicator of chat window  if (user.chatW && !user.chatW.closed && user.chatW.updateUserPresence)     user.chatW.updateUserPresence();  aRoster.print(); // update roster}/************************************************************************ * handleIQSet ************************************************************************ */function handleIQSet(iq) {  if (iq.getType() != "set") {    Debug.log("not handling iq:\n"+iq.getDoc().xml,3);    return;  }    Debug.log("got iq type 'set':\n"+iq.getDoc().xml,2);    if (iq.getQueryXMLNS() != 'jabber:iq:roster') { // only handle roster items so far    Debug.log("not handling iq:\n"+iq.getDoc().xml,1);    return;  }    for (var i=0; i<iq.getQuery().childNodes.length; i++) {    var item = iq.getQuery().childNodes.item(i);    var user = roster.getUserByJID(cutResource(item.getAttribute('jid')));    if (user) {      user.subscription = item.getAttribute('subscription');      if (item.getAttribute('subscription') == 'remove') {	Debug.log("removing user " + user.jid,2);        roster.removeUser(user);      } else { // update user        user.name = item.getAttribute('name')? htmlEnc(item.getAttribute('name')) : item.getAttribute('jid');        user.groups = new Array('');	for (var j=0; j<item.childNodes.length; j++)	  if (item.childNodes.item(j).nodeName == 'group')	    user.groups = user.groups.concat(item.childNodes.item(j).firstChild.nodeValue);        roster.updateGroups();      }    } else {// got a new user      if (isGateway(item.getAttribute('jid'))) { // auto add gateways	// get name	var name = cutResource(item.getAttribute('jid'));	for (var i in disco) {	  if (typeof(disco[i]) != 'object') continue;	  if (i == cutResource(item.getAttribute('jid')))	    name = disco[i].getQuery().getElementsByTagName('identity').item(0).getAttribute('name');	}	// add to roster	var aUser = new RosterUser(cutResource(item.getAttribute('jid')),item.getAttribute('subscription'),["Gateways"],name);	//aUser.fulljid = item.getAttribute('jid');	roster.addUser(aUser);		// set name and group	var aIQ = new JSJaCIQ();	aIQ.setType('set');	var query = aIQ.setQuery('jabber:iq:roster');	var aItem = query.appendChild(aIQ.getDoc().createElement('item'));	aItem.setAttribute('jid',item.getAttribute('jid'));	aItem.setAttribute('name',name);	aItem.appendChild(iq.getDoc().createElement('group')).appendChild(iq.getDoc().createTextNode('Gateways'));		con.send(aIQ);      } else { // new but not a gateway        var name = item.getAttribute('name')? item.getAttribute('name') : item.getAttribute('jid');	if (name.indexOf('@') != -1)	  name = name.substring(0,name.indexOf('@'));		item.setAttribute('name',name);        var groups = new Array('');	for (var j=0; j<item.childNodes.length; j++)	  if (item.childNodes.item(j).nodeName == 'group')	    groups = groups.concat(item.childNodes.item(j).firstChild.nodeValue);		roster.addUser(new RosterUser(cutResource(item.getAttribute('jid')),item.getAttribute('subscription'),groups,name));		var aIQ = new JSJaCIQ();	aIQ.setType('set');	var query = aIQ.setQuery('jabber:iq:roster');		var aItem = item.cloneNode(true);	aItem.removeAttribute('subscription');	query.appendChild(aItem);		con.send(aIQ); // set stripped name		if (item.getAttribute('subscription') == "from" && item.getAttribute('ask') != 'subscribe')	  openSubscription(item.getAttribute('jid')); // subscribe to user      }    }  }  roster.print();}function handleConError(e) {  switch (e.getAttribute('code')) {  case '401':    alert("Authorization failed");    if (!con.connected())      window.close();    break;  case '409':    alert("Registration failed!\n\nPlease choose a different username!");    break;  case '503':    alert("Service unavailable");    break;  case '500':    if (!con.connected() && !logoutCalled && onlstat != 'offline')      if (confirm("Internal Server Error.\n\nDisconnected.\n\nReconnect?"))	changeStatus(onlstat,onlmsg);    break;  default:    alert("An Error Occured:\nCode: "+e.getAttribute('code')+"\nType: "+e.getAttribute('type')+"\nCondition: "+e.firstChild.nodeName); // this shouldn't happen :)    break;  }}function handleDisconnect() {  if (logoutCalled || onlstat == 'offline')    return;    // disconnecting not with onunload handler triggered  statusLed.src = unavailableLed.src; // offline icon  statusMsg.value = '';    fmd.getElementById('roster').innerHTML = '';  // 	if (confirm("Disconnected\n\nReconnect?"))// 		changeStatus(onlstat,onlmsg);}function handleConnected() {  Debug.log("Connected",0);    if (register && opener && opener.document.forms[0] && opener.document.forms[0].register)    opener.document.forms[0].register.checked = false;     /* get/setup roster */  iq = new JSJaCIQ();  iq.setIQ(null,'get','roster_1');  iq.setQuery('jabber:iq:roster');  con.send(iq,getRoster); // cascading information retrieval}/* *** cascading onconnect handlers *** */function getRoster(iq) {  if (!iq || iq.getType() != 'result') {    if (iq)      Debug.log("Error fetching roster:\n"+iq.getDoc().xml,1);    else      Debug.log("Error fetching roster",1);    return;  }    Debug.log("got roster:\n"+iq.getDoc().xml,2);    roster = new Roster(iq.getQuery().childNodes,fmd);  roster.usersHidden = usersHidden;  roster.nick = jid.substring(0,jid.indexOf('@')); // remember nick for 1:1 Chats    // get saved state  iq = new JSJaCIQ();  iq.setIQ(null,'get','jwchat_state');  var query = iq.setQuery('jabber:iq:private');  query.appendChild(iq.getDoc().createElement('jwchat')).setAttribute('xmlns','jwchat:state');  con.send(iq,getSavedState);}function getSavedState(iq) {  if (!iq || iq.getType() != 'result')    if (iq)      Debug.log("Error retrieving saved state:\n"+iq.getDoc().xml,1);    else      Debug.log("Error retrieving saved state",1);    if (iq && iq.getType() == 'result') {    Debug.log(iq.getDoc().xml,3);    var jNode = iq.getNode().getElementsByTagName('jwchat').item(0);    for (var i=0; i<jNode.childNodes.length; i++) {      var item = jNode.childNodes.item(i);      if (item.nodeName == 'presence' && item.firstChild && onlstat == '' &&       item.firstChild.nodeValue != 'offline')	onlstat = item.firstChild.nodeValue;      if (item.nodeName == 'onlmsg' && item.firstChild && onlmsg == '')	onlmsg = item.firstChild.nodeValue;      if (item.nodeName == 'hiddenGroups' && item.firstChild) {	var hiddenGroups = item.firstChild.nodeValue.split(',');	for (var j=0; j<hiddenGroups.length; j++)	  if (hiddenGroups[j] != '')	    roster.hiddenGroups[hiddenGroups[j]] = true;      }    }  }    // get prefs  iq = new JSJaCIQ();  iq.setIQ(null,'get','jwchat_prefs');  var query = iq.setQuery('jabber:iq:private');  query.appendChild(iq.getDoc().createElement('jwchat')).setAttribute('xmlns','jwchat:prefs');    con.send(iq,getPrefs);}function getPrefs(iq) {  if (!iq || iq.getType() != 'result')    if (iq)      Debug.log("Error retrieving preferences:\n"+iq.getDoc().xml,1);    else      Debug.log("Error retrieving preferences",1);    if (iq && iq.getType() == 'result') {    Debug.log(iq.getDoc().xml,3);    if (iq.getNode().getElementsByTagName('jwchat').item(0)) {      var jNode = iq.getNode().getElementsByTagName('jwchat').item(0);      for (var i=0; i<jNode.childNodes.length; i++) {	switch (jNode.childNodes.item(i).nodeName) {	case 'usersHidden':	  if (eval(jNode.childNodes.item(i).firstChild.nodeValue) != usersHidden)	    roster.toggleHide();	  break;	case 'timerval':	  timerval = eval(jNode.childNodes.item(i).firstChild.nodeValue);	  con.setPollInterval(timerval);	  break;	case 'autoPopup':	  autoPopup = eval(jNode.childNodes.item(i).firstChild.nodeValue);	  break;	case 'autoPopupAway':	  autoPopupAway = eval(jNode.childNodes.item(i).firstChild.nodeValue);	  break;	case 'playSounds':	  playSounds = eval(jNode.childNodes.item(i).firstChild.nodeValue);	  break;	case 'focusWindows':	  focusWindows = eval(jNode.childNodes.item(i).firstChild.nodeValue);	  break;	case 'timestamps':	  timestamps = eval(jNode.childNodes.item(i).firstChild.nodeValue);	  break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -