JGroups使用范例(聊天小程序)

效果图:


代码部分:

package com.lei.jgoups;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.LinkedList;
import java.util.List;

import org.jgroups.JChannel;
import org.jgroups.Message;
import org.jgroups.ReceiverAdapter;
import org.jgroups.View;
import org.jgroups.util.Util;

public class SimpleChat extends ReceiverAdapter{
	JChannel channel;
	String user_name=System.getProperty("user.name", "n/a");
	final List<String> state=new LinkedList<String>();
	public static void main(String[] args) throws Exception {
		new SimpleChat().start();
	}
	private void start() throws Exception {
		channel=new JChannel();// 使用默认的配置, udp.xml【YBXIANG:】该文件位于jgroups-x.y.z.Final.jar中。
		channel.setReceiver(this);//注册一个 Receiver 来接收消息并查看变化
		channel.connect("ChatCluster");
		channel.getState(null, 10000);
		eventLoop();
		channel.close();
	}

	private void eventLoop() {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		while(true) {
			try {
				System.out.print(">"); 
				System.out.flush();
				String line=in.readLine().toLowerCase();
				if(line.startsWith("quit") || line.startsWith("exit"))
					break;
				line="[" + user_name + "] " + line;
				Message msg=new Message(null, line);
				channel.send(msg);
			}
			catch(Exception e) {
			}
		}
	}

	//如果有节点加入后会回调此函数
	public void viewAccepted(View new_view) {
		System.out.println("** view: " + new_view);
	}

	//接收到消息后会调用此函数
	public void receive(Message msg) {
		String line=msg.getSrc() + ": " + msg.getObject();
		System.out.println(line);
		synchronized(state) {//同步调用
			state.add(line);
		}
	}

	//getState回调方法
	public void getState(OutputStream output) throws Exception {
		synchronized(state) {
			Util.objectToStream(state, new DataOutputStream(output));
		}
	}

	// 从input stream中读取状态,然后做相应的设置:
	public void setState(InputStream input) throws Exception {
		List<String> list;
		list=(List<String>)Util.objectFromStream(new DataInputStream(input));
		synchronized(state) {
			state.clear();
			state.addAll(list);
		}
		System.out.println(list.size() + " messages in chat history):");
		for(String str: list) {
			System.out.println(str);
		}
	}
}

架包:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值