com.kixeye.kixmpp.server.cluster.message.PrivateChatTask.java Source code

Java tutorial

Introduction

Here is the source code for com.kixeye.kixmpp.server.cluster.message.PrivateChatTask.java

Source

package com.kixeye.kixmpp.server.cluster.message;

/*
 * #%L
 * KIXMPP
 * %%
 * Copyright (C) 2014 KIXEYE, Inc
 * %%
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * #L%
 */

import com.kixeye.kixmpp.server.KixmppServer;
import com.kixeye.kixmpp.server.module.bind.BindKixmppServerModule;
import io.netty.channel.Channel;

import java.util.Set;

import org.jdom2.Element;

import com.kixeye.kixmpp.KixmppJid;

/**
 * Distributes a private message.
 *
 * @author ebahtijaragic
 */
public class PrivateChatTask extends ClusterTask {
    private String fromJid;
    private String toJid;
    private String body;

    public PrivateChatTask() {
    }

    public PrivateChatTask(KixmppJid fromJid, KixmppJid toJid, String body) {
        this.fromJid = fromJid.getFullJid();
        this.toJid = toJid.getFullJid();
        this.body = body;
    }

    /**
     * @return the fromJid
     */
    public String getFromJid() {
        return fromJid;
    }

    /**
     * @param fromJid the fromJid to set
     */
    public void setFromJid(String fromJid) {
        this.fromJid = fromJid;
    }

    /**
     * @return the toJid
     */
    public String getToJid() {
        return toJid;
    }

    /**
     * @param toJid the toJid to set
     */
    public void setToJid(String toJid) {
        this.toJid = toJid;
    }

    /**
     * @return the body
     */
    public String getBody() {
        return body;
    }

    /**
     * @param body the body to set
     */
    public void setBody(String body) {
        this.body = body;
    }

    /**
     * @see org.fusesource.hawtdispatch.Task#run()
     */
    public void run() {
        KixmppJid fromJid = KixmppJid.fromRawJid(this.fromJid);
        KixmppJid toJid = KixmppJid.fromRawJid(this.toJid);
        KixmppServer server = getKixmppServer();

        // broadcast message stanza to all channels of the recipient
        for (Channel toChannel : server.getChannels(toJid.getNode())) {
            Element messageElement = new Element("message");
            messageElement.setAttribute("type", "chat");
            messageElement.setAttribute("from", fromJid.getFullJid());
            messageElement.setAttribute("to", toJid.getFullJid());

            Element bodyElement = new Element("body");
            bodyElement.setText(body);

            messageElement.addContent(bodyElement);

            toChannel.writeAndFlush(messageElement);
        }

        // broadcast message stanza to all channels of the sender
        // except for the channel it was sent from
        for (Channel fromChannel : server.getChannels(fromJid.getNode())) {
            // skip the channel message was sent from
            if (fromChannel.attr(BindKixmppServerModule.JID).get().toString()
                    .equalsIgnoreCase(fromJid.toString())) {
                continue;
            }
            Element messageElement = new Element("message");
            messageElement.setAttribute("type", "chat");
            messageElement.setAttribute("from", fromJid.getFullJid());
            messageElement.setAttribute("to", toJid.getFullJid());

            Element bodyElement = new Element("body");
            bodyElement.setText(body);

            messageElement.addContent(bodyElement);

            fromChannel.writeAndFlush(messageElement);
        }
    }
}