All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jgroups.util.MyReceiver Maven / Gradle / Ivy

Go to download

This artifact provides a single jar that contains all classes required to use remote Jakarta Enterprise Beans and Jakarta Messaging, including all dependencies. It is intended for use by those not using maven, maven users should just import the Jakarta Enterprise Beans and Jakarta Messaging BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up with different versions on classes on the class path).

The newest version!
package org.jgroups.util;

import org.jgroups.Message;
import org.jgroups.Receiver;
import org.jgroups.View;

import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * Generic receiver for a JChannel
 * @author Bela Ban
 * @since  3.3
 */
public class MyReceiver implements Receiver, Closeable {
    protected final List            list=new CopyOnWriteArrayList<>();
    protected String                   name;
    protected boolean                  verbose;
    protected boolean                  raw_msgs;
    protected final Map state=new HashMap<>();

    @Override public void receive(Message msg) {
        T obj=raw_msgs? (T)msg : (T)msg.getObject();
        list.add(obj);
        if(verbose)
            System.out.println((name() != null? name() + ":" : "") + " received message from " + msg.getSrc() + ": " + obj);
    }

    @Override public void viewAccepted(View new_view) {
        if(verbose)
            System.out.printf("-- %s: view is %s\n", name, new_view);
    }

    @Override
    public void getState(OutputStream out) throws Exception {
        DataOutputStream o=new DataOutputStream(out);
        synchronized(state) {
            o.writeInt(state.size());
            if(!state.isEmpty()) {
                for(Map.Entry e: state.entrySet()) {
                    o.writeUTF(e.getKey());
                    o.writeUTF(e.getValue());
                }
            }
        }
    }

    @Override
    public void setState(InputStream input) throws Exception {
        DataInputStream in=new DataInputStream(input);
        Map m=new HashMap<>();
        int size=in.readInt();
        for(int i=0; i < size; i++)
            m.put(in.readUTF(), in.readUTF());
        synchronized(state) {
            state.clear();
            state.putAll(m);
        }
    }

    public MyReceiver      rawMsgs(boolean flag)      {this.raw_msgs=flag; return this;}
    public List            list()                     {return list;}
    public List       list(Function f) {return list.stream().map(f).collect(Collectors.toList());}
    public Map state()                    {return state;}
    public MyReceiver      verbose(boolean flag)      {verbose=flag; return this;}
    public String             name()                     {return name;}
    public MyReceiver      name(String name)          {this.name=name; return this;}
    public MyReceiver      reset()                    {list.clear(); return this;}
    public int                size()                     {return list.size();}
    public void               close() throws IOException {reset();}

    @Override
    public String toString() {
        return String.format("%d elements", list.size());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy