正在查看: 95爱播免登录版 v3.1.9 应用的 AgentSession.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: 95爱播免登录版 v3.1.9 应用的 AgentSession.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package org.jivesoftware.smackx.workgroup.agent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.jivesoftware.smack.Connection;
import org.jivesoftware.smack.PacketCollector;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.AndFilter;
import org.jivesoftware.smack.filter.FromContainsFilter;
import org.jivesoftware.smack.filter.OrFilter;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.filter.PacketIDFilter;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.DefaultPacketExtension;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smackx.Form;
import org.jivesoftware.smackx.ReportedData;
import org.jivesoftware.smackx.packet.MUCUser;
import org.jivesoftware.smackx.workgroup.MetaData;
import org.jivesoftware.smackx.workgroup.QueueUser;
import org.jivesoftware.smackx.workgroup.WorkgroupInvitation;
import org.jivesoftware.smackx.workgroup.WorkgroupInvitationListener;
import org.jivesoftware.smackx.workgroup.agent.WorkgroupQueue;
import org.jivesoftware.smackx.workgroup.ext.history.AgentChatHistory;
import org.jivesoftware.smackx.workgroup.ext.history.ChatMetadata;
import org.jivesoftware.smackx.workgroup.ext.macros.MacroGroup;
import org.jivesoftware.smackx.workgroup.ext.macros.Macros;
import org.jivesoftware.smackx.workgroup.ext.notes.ChatNotes;
import org.jivesoftware.smackx.workgroup.packet.AgentStatus;
import org.jivesoftware.smackx.workgroup.packet.DepartQueuePacket;
import org.jivesoftware.smackx.workgroup.packet.MonitorPacket;
import org.jivesoftware.smackx.workgroup.packet.OccupantsInfo;
import org.jivesoftware.smackx.workgroup.packet.OfferRequestProvider;
import org.jivesoftware.smackx.workgroup.packet.OfferRevokeProvider;
import org.jivesoftware.smackx.workgroup.packet.QueueDetails;
import org.jivesoftware.smackx.workgroup.packet.QueueOverview;
import org.jivesoftware.smackx.workgroup.packet.RoomInvitation;
import org.jivesoftware.smackx.workgroup.packet.RoomTransfer;
import org.jivesoftware.smackx.workgroup.packet.SessionID;
import org.jivesoftware.smackx.workgroup.packet.Transcript;
import org.jivesoftware.smackx.workgroup.packet.Transcripts;
import org.jivesoftware.smackx.workgroup.settings.GenericSettings;
import org.jivesoftware.smackx.workgroup.settings.SearchSettings;
public class AgentSession {
private Agent agent;
private Connection connection;
private final List<WorkgroupInvitationListener> invitationListeners;
private int maxChats;
private final Map<String, List<String>> metaData;
private final List<OfferListener> offerListeners;
private PacketListener packetListener;
private Presence.Mode presenceMode;
private final List<QueueUsersListener> queueUsersListeners;
private Map<String, WorkgroupQueue> queues;
private TranscriptManager transcriptManager;
private TranscriptSearchManager transcriptSearchManager;
private String workgroupJID;
private boolean online = false;
private AgentRoster agentRoster = null;
public AgentSession(String str, Connection connection) {
if (!connection.isAuthenticated()) {
throw new IllegalStateException("Must login to server before creating workgroup.");
}
this.workgroupJID = str;
this.connection = connection;
this.transcriptManager = new TranscriptManager(connection);
this.transcriptSearchManager = new TranscriptSearchManager(connection);
this.maxChats = -1;
this.metaData = new HashMap();
this.queues = new HashMap();
this.offerListeners = new ArrayList();
this.invitationListeners = new ArrayList();
this.queueUsersListeners = new ArrayList();
OrFilter orFilter = new OrFilter();
orFilter.addFilter(new PacketTypeFilter(OfferRequestProvider.OfferRequestPacket.class));
orFilter.addFilter(new PacketTypeFilter(OfferRevokeProvider.OfferRevokePacket.class));
orFilter.addFilter(new PacketTypeFilter(Presence.class));
orFilter.addFilter(new PacketTypeFilter(Message.class));
PacketListener packetListener = new PacketListener() {
public void processPacket(Packet packet) {
try {
AgentSession.this.handlePacket(packet);
} catch (Exception e) {
e.printStackTrace();
}
}
};
this.packetListener = packetListener;
connection.addPacketListener(packetListener, orFilter);
this.agent = new Agent(connection, str);
}
private void fireInvitationEvent(String str, String str2, String str3, String str4, Map<String, List<String>> map) {
WorkgroupInvitation workgroupInvitation = new WorkgroupInvitation(this.connection.getUser(), str, this.workgroupJID, str2, str3, str4, map);
synchronized (this.invitationListeners) {
Iterator<WorkgroupInvitationListener> it = this.invitationListeners.iterator();
while (it.hasNext()) {
it.next().invitationReceived(workgroupInvitation);
}
}
}
private void fireOfferRequestEvent(OfferRequestProvider.OfferRequestPacket offerRequestPacket) {
Offer offer = new Offer(this.connection, this, offerRequestPacket.getUserID(), offerRequestPacket.getUserJID(), getWorkgroupJID(), new Date(new Date().getTime() + (offerRequestPacket.getTimeout() * 1000)), offerRequestPacket.getSessionID(), offerRequestPacket.getMetaData(), offerRequestPacket.getContent());
synchronized (this.offerListeners) {
Iterator<OfferListener> it = this.offerListeners.iterator();
while (it.hasNext()) {
it.next().offerReceived(offer);
}
}
}
private void fireOfferRevokeEvent(OfferRevokeProvider.OfferRevokePacket offerRevokePacket) {
RevokedOffer revokedOffer = new RevokedOffer(offerRevokePacket.getUserJID(), offerRevokePacket.getUserID(), getWorkgroupJID(), offerRevokePacket.getSessionID(), offerRevokePacket.getReason(), new Date());
synchronized (this.offerListeners) {
Iterator<OfferListener> it = this.offerListeners.iterator();
while (it.hasNext()) {
it.next().offerRevoked(revokedOffer);
}
}
}
private void fireQueueUsersEvent(WorkgroupQueue workgroupQueue, WorkgroupQueue.Status status, int i, Date date, Set<QueueUser> set) {
synchronized (this.queueUsersListeners) {
for (QueueUsersListener queueUsersListener : this.queueUsersListeners) {
if (status != null) {
queueUsersListener.statusUpdated(workgroupQueue, status);
}
if (i != -1) {
queueUsersListener.averageWaitTimeUpdated(workgroupQueue, i);
}
if (date != null) {
queueUsersListener.oldestEntryUpdated(workgroupQueue, date);
}
if (set != null) {
queueUsersListener.usersUpdated(workgroupQueue, set);
}
}
}
}
public void handlePacket(Packet packet) {
if (packet instanceof OfferRequestProvider.OfferRequestPacket) {
IQ iq = new IQ() {
public String getChildElementXML() {
return null;
}
};
iq.setPacketID(packet.getPacketID());
iq.setTo(packet.getFrom());
iq.setType(IQ.Type.RESULT);
this.connection.sendPacket(iq);
fireOfferRequestEvent((OfferRequestProvider.OfferRequestPacket) packet);
return;
}
if (!(packet instanceof Presence)) {
if (!(packet instanceof Message)) {
if (packet instanceof OfferRevokeProvider.OfferRevokePacket) {
IQ iq2 = new IQ() {
public String getChildElementXML() {
return null;
}
};
iq2.setPacketID(packet.getPacketID());
iq2.setType(IQ.Type.RESULT);
this.connection.sendPacket(iq2);
fireOfferRevokeEvent((OfferRevokeProvider.OfferRevokePacket) packet);
return;
}
return;
}
Message message = (Message) packet;
MUCUser mUCUser = (MUCUser) message.getExtension("x", "http://jabber.org/protocol/muc#user");
MUCUser.Invite invite = mUCUser != null ? mUCUser.getInvite() : null;
if (invite == null || !this.workgroupJID.equals(invite.getFrom())) {
return;
}
SessionID sessionID = (SessionID) message.getExtension(SessionID.ELEMENT_NAME, "http://jivesoftware.com/protocol/workgroup");
String sessionID2 = sessionID != null ? sessionID.getSessionID() : null;
MetaData metaData = (MetaData) message.getExtension(MetaData.ELEMENT_NAME, "http://jivesoftware.com/protocol/workgroup");
fireInvitationEvent(message.getFrom(), sessionID2, message.getBody(), message.getFrom(), metaData != null ? metaData.getMetaData() : null);
return;
}
Presence presence = (Presence) packet;
String parseResource = StringUtils.parseResource(presence.getFrom());
WorkgroupQueue workgroupQueue = this.queues.get(parseResource);
if (workgroupQueue == null) {
workgroupQueue = new WorkgroupQueue(parseResource);
this.queues.put(parseResource, workgroupQueue);
}
WorkgroupQueue workgroupQueue2 = workgroupQueue;
QueueOverview queueOverview = (QueueOverview) presence.getExtension(QueueOverview.ELEMENT_NAME, QueueOverview.NAMESPACE);
if (queueOverview != null) {
if (queueOverview.getStatus() == null) {
workgroupQueue2.setStatus(WorkgroupQueue.Status.CLOSED);
} else {
workgroupQueue2.setStatus(queueOverview.getStatus());
}
workgroupQueue2.setAverageWaitTime(queueOverview.getAverageWaitTime());
workgroupQueue2.setOldestEntry(queueOverview.getOldestEntry());
fireQueueUsersEvent(workgroupQueue2, queueOverview.getStatus(), queueOverview.getAverageWaitTime(), queueOverview.getOldestEntry(), null);
return;
}
QueueDetails queueDetails = (QueueDetails) packet.getExtension(QueueDetails.ELEMENT_NAME, "http://jabber.org/protocol/workgroup");
if (queueDetails != null) {
workgroupQueue2.setUsers(queueDetails.getUsers());
fireQueueUsersEvent(workgroupQueue2, null, -1, null, queueDetails.getUsers());
return;
}
DefaultPacketExtension extension = presence.getExtension("notify-agents", "http://jabber.org/protocol/workgroup");
if (extension != null) {
int parseInt = Integer.parseInt(extension.getValue("current-chats"));
int parseInt2 = Integer.parseInt(extension.getValue("max-chats"));
workgroupQueue2.setCurrentChats(parseInt);
workgroupQueue2.setMaxChats(parseInt2);
}
}
public void addInvitationListener(WorkgroupInvitationListener workgroupInvitationListener) {
synchronized (this.invitationListeners) {
if (!this.invitationListeners.contains(workgroupInvitationListener)) {
this.invitationListeners.add(workgroupInvitationListener);
}
}
}
public void addOfferListener(OfferListener offerListener) {
synchronized (this.offerListeners) {
if (!this.offerListeners.contains(offerListener)) {
this.offerListeners.add(offerListener);
}
}
}
public void addQueueUsersListener(QueueUsersListener queueUsersListener) {
synchronized (this.queueUsersListeners) {
if (!this.queueUsersListeners.contains(queueUsersListener)) {
this.queueUsersListeners.add(queueUsersListener);
}
}
}
public void close() {
this.connection.removePacketListener(this.packetListener);
}
public void dequeueUser(String str) throws XMPPException {
this.connection.sendPacket(new DepartQueuePacket(this.workgroupJID));
}
public Agent getAgent() {
return this.agent;
}
public AgentChatHistory getAgentHistory(String str, int i, Date date) throws XMPPException {
AgentChatHistory agentChatHistory = date != null ? new AgentChatHistory(str, i, date) : new AgentChatHistory(str, i);
agentChatHistory.setType(IQ.Type.GET);
agentChatHistory.setTo(this.workgroupJID);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(agentChatHistory.getPacketID()));
this.connection.sendPacket(agentChatHistory);
AgentChatHistory nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() == null) {
return nextResult;
}
throw new XMPPException(nextResult.getError());
}
public AgentRoster getAgentRoster() {
AgentRoster agentRoster;
if (this.agentRoster == null) {
this.agentRoster = new AgentRoster(this.connection, this.workgroupJID);
}
int i = 0;
while (true) {
agentRoster = this.agentRoster;
if (agentRoster.rosterInitialized || i > 2000) {
break;
}
try {
Thread.sleep(500L);
} catch (Exception unused) {
}
i += 500;
}
return agentRoster;
}
public Map<String, List<String>> getChatMetadata(String str) throws XMPPException {
ChatMetadata chatMetadata = new ChatMetadata();
chatMetadata.setType(IQ.Type.GET);
chatMetadata.setTo(this.workgroupJID);
chatMetadata.setSessionID(str);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(chatMetadata.getPacketID()));
this.connection.sendPacket(chatMetadata);
ChatMetadata nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() == null) {
return nextResult.getMetadata();
}
throw new XMPPException(nextResult.getError());
}
public GenericSettings getGenericSettings(Connection connection, String str) throws XMPPException {
GenericSettings genericSettings = new GenericSettings();
genericSettings.setType(IQ.Type.GET);
genericSettings.setTo(this.workgroupJID);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(genericSettings.getPacketID()));
this.connection.sendPacket(genericSettings);
GenericSettings nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server on status set.");
}
if (nextResult.getError() == null) {
return nextResult;
}
throw new XMPPException(nextResult.getError());
}
public MacroGroup getMacros(boolean z) throws XMPPException {
Macros macros = new Macros();
macros.setType(IQ.Type.GET);
macros.setTo(this.workgroupJID);
macros.setPersonal(!z);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(macros.getPacketID()));
this.connection.sendPacket(macros);
Macros nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() == null) {
return nextResult.getRootGroup();
}
throw new XMPPException(nextResult.getError());
}
public int getMaxChats() {
return this.maxChats;
}
public List<String> getMetaData(String str) {
return this.metaData.get(str);
}
public ChatNotes getNote(String str) throws XMPPException {
ChatNotes chatNotes = new ChatNotes();
chatNotes.setType(IQ.Type.GET);
chatNotes.setTo(this.workgroupJID);
chatNotes.setSessionID(str);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(chatNotes.getPacketID()));
this.connection.sendPacket(chatNotes);
ChatNotes nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() == null) {
return nextResult;
}
throw new XMPPException(nextResult.getError());
}
public OccupantsInfo getOccupantsInfo(String str) throws XMPPException {
OccupantsInfo occupantsInfo = new OccupantsInfo(str);
occupantsInfo.setType(IQ.Type.GET);
occupantsInfo.setTo(this.workgroupJID);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(occupantsInfo.getPacketID()));
this.connection.sendPacket(occupantsInfo);
OccupantsInfo nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() == null) {
return nextResult;
}
throw new XMPPException(nextResult.getError());
}
public Presence.Mode getPresenceMode() {
return this.presenceMode;
}
public WorkgroupQueue getQueue(String str) {
return this.queues.get(str);
}
public Iterator<WorkgroupQueue> getQueues() {
return Collections.unmodifiableMap(new HashMap(this.queues)).values().iterator();
}
public SearchSettings getSearchSettings() throws XMPPException {
SearchSettings searchSettings = new SearchSettings();
searchSettings.setType(IQ.Type.GET);
searchSettings.setTo(this.workgroupJID);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(searchSettings.getPacketID()));
this.connection.sendPacket(searchSettings);
SearchSettings nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() == null) {
return nextResult;
}
throw new XMPPException(nextResult.getError());
}
public Transcript getTranscript(String str) throws XMPPException {
return this.transcriptManager.getTranscript(this.workgroupJID, str);
}
public Form getTranscriptSearchForm() throws XMPPException {
return this.transcriptSearchManager.getSearchForm(StringUtils.parseServer(this.workgroupJID));
}
public Transcripts getTranscripts(String str) throws XMPPException {
return this.transcriptManager.getTranscripts(this.workgroupJID, str);
}
public String getWorkgroupJID() {
return this.workgroupJID;
}
public boolean hasMonitorPrivileges(Connection connection) throws XMPPException {
MonitorPacket monitorPacket = new MonitorPacket();
monitorPacket.setType(IQ.Type.GET);
monitorPacket.setTo(this.workgroupJID);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(monitorPacket.getPacketID()));
this.connection.sendPacket(monitorPacket);
MonitorPacket nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server on status set.");
}
if (nextResult.getError() == null) {
return nextResult.isMonitor();
}
throw new XMPPException(nextResult.getError());
}
public boolean isOnline() {
return this.online;
}
public void makeRoomOwner(Connection connection, String str) throws XMPPException {
MonitorPacket monitorPacket = new MonitorPacket();
monitorPacket.setType(IQ.Type.SET);
monitorPacket.setTo(this.workgroupJID);
monitorPacket.setSessionID(str);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(monitorPacket.getPacketID()));
this.connection.sendPacket(monitorPacket);
Packet nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server on status set.");
}
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
}
public void removeInvitationListener(WorkgroupInvitationListener workgroupInvitationListener) {
synchronized (this.invitationListeners) {
this.invitationListeners.remove(workgroupInvitationListener);
}
}
public void removeMetaData(String str) throws XMPPException {
synchronized (this.metaData) {
if (this.metaData.remove(str) != null) {
setStatus(this.presenceMode, this.maxChats);
}
}
}
public void removeOfferListener(OfferListener offerListener) {
synchronized (this.offerListeners) {
this.offerListeners.remove(offerListener);
}
}
public void removeQueueUsersListener(QueueUsersListener queueUsersListener) {
synchronized (this.queueUsersListeners) {
this.queueUsersListeners.remove(queueUsersListener);
}
}
public void saveMacros(MacroGroup macroGroup) throws XMPPException {
Macros macros = new Macros();
macros.setType(IQ.Type.SET);
macros.setTo(this.workgroupJID);
macros.setPersonal(true);
macros.setPersonalMacroGroup(macroGroup);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(macros.getPacketID()));
this.connection.sendPacket(macros);
IQ nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server on status set.");
}
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
}
public ReportedData searchTranscripts(Form form) throws XMPPException {
return this.transcriptSearchManager.submitSearch(StringUtils.parseServer(this.workgroupJID), form);
}
public void sendRoomInvitation(RoomInvitation.Type type, String str, String str2, String str3) throws XMPPException {
final RoomInvitation roomInvitation = new RoomInvitation(type, str, str2, str3);
IQ iq = new IQ() {
public String getChildElementXML() {
return roomInvitation.toXML();
}
};
iq.setType(IQ.Type.SET);
iq.setTo(this.workgroupJID);
iq.setFrom(this.connection.getUser());
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(iq.getPacketID()));
this.connection.sendPacket(iq);
IQ nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
}
public void sendRoomTransfer(RoomTransfer.Type type, String str, String str2, String str3) throws XMPPException {
final RoomTransfer roomTransfer = new RoomTransfer(type, str, str2, str3);
IQ iq = new IQ() {
public String getChildElementXML() {
return roomTransfer.toXML();
}
};
iq.setType(IQ.Type.SET);
iq.setTo(this.workgroupJID);
iq.setFrom(this.connection.getUser());
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(iq.getPacketID()));
this.connection.sendPacket(iq);
IQ nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server.");
}
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
}
public void setMetaData(String str, String str2) throws XMPPException {
synchronized (this.metaData) {
List<String> list = this.metaData.get(str);
if (list == null || !list.get(0).equals(str2)) {
list.set(0, str2);
setStatus(this.presenceMode, this.maxChats);
}
}
}
public void setNote(String str, String str2) throws XMPPException {
String escapeForXML = StringUtils.escapeForXML(ChatNotes.replace(str2, "\n", "\\n"));
ChatNotes chatNotes = new ChatNotes();
chatNotes.setType(IQ.Type.SET);
chatNotes.setTo(this.workgroupJID);
chatNotes.setSessionID(str);
chatNotes.setNotes(escapeForXML);
PacketCollector createPacketCollector = this.connection.createPacketCollector(new PacketIDFilter(chatNotes.getPacketID()));
this.connection.sendPacket(chatNotes);
IQ nextResult = createPacketCollector.nextResult(SmackConfiguration.getPacketReplyTimeout());
createPacketCollector.cancel();
if (nextResult == null) {
throw new XMPPException("No response from server on status set.");
}
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
}
public void setOnline(boolean z) throws XMPPException {
if (this.online == z) {
return;
}
if (!z) {
this.online = z;
Presence presence = new Presence(Presence.Type.unavailable);
presence.setTo(this.workgroupJID);
presence.addExtension(new DefaultPacketExtension(AgentStatus.ELEMENT_NAME, "http://jabber.org/protocol/workgroup"));
this.connection.sendPacket(presence);
return;
}
Presence presence2 = new Presence(Presence.Type.available);
presence2.setTo(this.workgroupJID);
presence2.addExtension(new DefaultPacketExtension(AgentStatus.ELEMENT_NAME, "http://jabber.org/protocol/workgroup"));
PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new PacketFilter[]{new PacketTypeFilter(Presence.class), new FromContainsFilter(this.workgroupJID)}));
this.connection.sendPacket(presence2);
Presence nextResult = createPacketCollector.nextResult(5000L);
createPacketCollector.cancel();
if (!nextResult.isAvailable()) {
throw new XMPPException("No response from server on status set.");
}
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
this.online = z;
}
public void setStatus(Presence.Mode mode, int i) throws XMPPException {
setStatus(mode, i, null);
}
public void setStatus(Presence.Mode mode, int i, String str) throws XMPPException {
if (!this.online) {
throw new IllegalStateException("Cannot set status when the agent is not online.");
}
if (mode == null) {
mode = Presence.Mode.available;
}
this.presenceMode = mode;
this.maxChats = i;
Presence presence = new Presence(Presence.Type.available);
presence.setMode(mode);
presence.setTo(getWorkgroupJID());
if (str != null) {
presence.setStatus(str);
}
DefaultPacketExtension defaultPacketExtension = new DefaultPacketExtension(AgentStatus.ELEMENT_NAME, "http://jabber.org/protocol/workgroup");
StringBuilder sb = new StringBuilder();
sb.append(i);
defaultPacketExtension.setValue("max-chats", sb.toString());
presence.addExtension(defaultPacketExtension);
presence.addExtension(new MetaData(this.metaData));
PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new PacketFilter[]{new PacketTypeFilter(Presence.class), new FromContainsFilter(this.workgroupJID)}));
this.connection.sendPacket(presence);
Presence nextResult = createPacketCollector.nextResult(5000L);
createPacketCollector.cancel();
if (!nextResult.isAvailable()) {
throw new XMPPException("No response from server on status set.");
}
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
}
public void setStatus(Presence.Mode mode, String str) throws XMPPException {
if (this.online) {
if (mode == null) {
mode = Presence.Mode.available;
}
this.presenceMode = mode;
Presence presence = new Presence(Presence.Type.available);
presence.setMode(mode);
presence.setTo(getWorkgroupJID());
if (str != null) {
presence.setStatus(str);
}
presence.addExtension(new MetaData(this.metaData));
PacketCollector createPacketCollector = this.connection.createPacketCollector(new AndFilter(new PacketFilter[]{new PacketTypeFilter(Presence.class), new FromContainsFilter(this.workgroupJID)}));
this.connection.sendPacket(presence);
Presence nextResult = createPacketCollector.nextResult(5000L);
createPacketCollector.cancel();
if (nextResult.isAvailable()) {
if (nextResult.getError() != null) {
throw new XMPPException(nextResult.getError());
}
return;
}
throw new XMPPException("No response from server on status set.");
}
throw new IllegalStateException("Cannot set status when the agent is not online.");
}
}