/* * Copyright (c) 2010-2014 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ /* * Copyright (c) 2015 Tarun Gupta. * Licensed under the simplified BSD license. * See Documentation/Licenses/BSD-simplified.txt for more information. */ package com.isode.stroke.muc; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Vector; import com.isode.stroke.client.StanzaChannel; import com.isode.stroke.elements.ErrorPayload; import com.isode.stroke.elements.Form; import com.isode.stroke.elements.IQ; import com.isode.stroke.elements.MUCAdminPayload; import com.isode.stroke.elements.MUCDestroyPayload; import com.isode.stroke.elements.MUCInvitationPayload; import com.isode.stroke.elements.MUCItem; import com.isode.stroke.elements.MUCOccupant; import com.isode.stroke.elements.MUCOwnerPayload; import com.isode.stroke.elements.MUCPayload; import com.isode.stroke.elements.MUCUserPayload; import com.isode.stroke.elements.Message; import com.isode.stroke.elements.Presence; import com.isode.stroke.jid.JID; import com.isode.stroke.jid.JID.CompareType; import com.isode.stroke.presence.DirectedPresenceSender; import com.isode.stroke.queries.GenericRequest; import com.isode.stroke.queries.IQRouter; import com.isode.stroke.signals.Signal; import com.isode.stroke.signals.Signal1; import com.isode.stroke.signals.Signal2; import com.isode.stroke.signals.Signal3; import com.isode.stroke.signals.SignalConnection; import com.isode.stroke.signals.Slot1; import com.isode.stroke.signals.Slot2; public abstract class MUC { public enum JoinResult { JoinSucceeded, JoinFailed }; public enum LeavingType { LeavePart, LeaveKick, LeaveBan, LeaveDestroy, LeaveNotMember, Disconnect }; /** * Returns the (bare) JID of the MUC. */ public abstract JID getJID(); /** * Returns if the room is unlocked and other people can join the room. * @return True if joinable by others; false otherwise. */ public abstract boolean isUnlocked(); public abstract void joinAs(final String nick); public abstract void joinWithContextSince(final String nick, final Date since); /*public abstract void queryRoomInfo(); */ /*public abstract void queryRoomItems(); */ /*public abstract String getCurrentNick(); */ public abstract Map getOccupants(); public abstract void changeNickname(final String newNickname); public abstract void part(); /*public abstract void handleIncomingMessage(Message::ref message); */ /** Expose public so it can be called when e.g. user goes offline */ public abstract void handleUserLeft(LeavingType l); /** Get occupant information*/ public abstract MUCOccupant getOccupant(final String nick); public abstract boolean hasOccupant(final String nick); public abstract void kickOccupant(final JID jid); public abstract void changeOccupantRole(final JID jid, MUCOccupant.Role role); public abstract void requestAffiliationList(MUCOccupant.Affiliation aff); public abstract void changeAffiliation(final JID jid, MUCOccupant.Affiliation affiliation); public abstract void changeSubject(final String subject); public abstract void requestConfigurationForm(); public abstract void configureRoom(Form f); public abstract void cancelConfigureRoom(); public abstract void destroyRoom(); /** Send an invite for the person to join the MUC */ public abstract void invitePerson(final JID person, final String reason, boolean isImpromptu, boolean isReuseChat); public abstract void setCreateAsReservedIfNew(); public abstract void setPassword(final String password); public final Signal1 onJoinComplete = new Signal1(); public final Signal1 onJoinFailed = new Signal1(); public final Signal3 onRoleChangeFailed = new Signal3(); public final Signal3 onAffiliationChangeFailed = new Signal3(); public final Signal1 onConfigurationFailed = new Signal1(); public final Signal1 onAffiliationListFailed = new Signal1(); public final Signal1 onOccupantPresenceChange = new Signal1(); public final Signal3 onOccupantRoleChanged = new Signal3(); public final Signal3 onOccupantAffiliationChanged = new Signal3(); public final Signal1 onOccupantJoined = new Signal1(); public final Signal2 onOccupantNicknameChanged = new Signal2(); public final Signal3 onOccupantLeft = new Signal3(); public final Signal1
onConfigurationFormReceived = new Signal1(); public final Signal2 > onAffiliationListReceived = new Signal2 >(); public final Signal onUnlocked = new Signal(); /* public final Signal1 onInfoResult; */ /* public final Signal1 onItemsResult; */ }