quoteclient.java
来自「JGRoups源码」· Java 代码 · 共 267 行
JAVA
267 行
// $Id: QuoteClient.java,v 1.11 2006/05/03 08:45:19 belaban Exp $package org.jgroups.demos;import org.jgroups.*;import org.jgroups.blocks.GroupRequest;import org.jgroups.blocks.RpcDispatcher;import org.jgroups.util.Rsp;import org.jgroups.util.RspList;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.util.Enumeration;import java.util.Hashtable;/** * Used in conjunction with QuoteServer: a client is member of a group of quote servers which replicate * stock quotes among themselves. The client broadcasts its request (set, get quotes) and (in the case of get * waits for the first reply received (usually the one from the quote server closest to it). The client * can get and set quotes as long as a minimum of 1 server (in the group) is running. * @author Bela Ban */public class QuoteClient extends Frame implements WindowListener, ActionListener, MembershipListener { static final String channel_name="Quotes"; RpcDispatcher disp; Channel channel; final Button get=new Button("Get"); final Button set=new Button("Set"); final Button quit=new Button("Quit"); final Button get_all=new Button("All"); final Label stock=new Label("Stock"); final Label value=new Label("Value"); final Label err_msg=new Label("Error"); final TextField stock_field=new TextField(); final TextField value_field=new TextField(); final java.awt.List listbox=new java.awt.List(); final Font default_font=new Font("Helvetica", Font.PLAIN, 12); final String props=null; // default stack from JChannel public QuoteClient() { super(); try { channel=new JChannel(props); channel.setOpt(Channel.LOCAL, Boolean.FALSE); disp=new RpcDispatcher(channel, null, this, this); channel.connect(channel_name); } catch(Exception e) { System.err.println("QuoteClient(): " + e); } addWindowListener(this); } private void showMsg(String msg) { err_msg.setText(msg); err_msg.setVisible(true); } private void clearMsg() { err_msg.setVisible(false); } public void start() { setLayout(null); setSize(400, 300); setFont(default_font); stock.setBounds(new Rectangle(10, 30, 60, 30)); value.setBounds(new Rectangle(10, 60, 60, 30)); stock_field.setBounds(new Rectangle(100, 30, 100, 30)); value_field.setBounds(new Rectangle(100, 60, 100, 30)); listbox.setBounds(210, 30, 150, 160); err_msg.setBounds(new Rectangle(10, 200, 350, 30)); err_msg.setFont(new Font("Helvetica", Font.ITALIC, 12)); err_msg.setForeground(Color.red); err_msg.setVisible(false); get.setBounds(new Rectangle(10, 250, 80, 30)); set.setBounds(new Rectangle(100, 250, 80, 30)); quit.setBounds(new Rectangle(190, 250, 80, 30)); get_all.setBounds(new Rectangle(280, 250, 80, 30)); get.addActionListener(this); set.addActionListener(this); quit.addActionListener(this); get_all.addActionListener(this); add(stock); add(value); add(stock_field); add(value_field); add(err_msg); add(get); add(set); add(quit); add(get_all); add(listbox); // stock_field.requestFocus(); setVisible(true); } public void windowActivated(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowClosing(WindowEvent e) { System.exit(0); } public void windowDeactivated(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowOpened(WindowEvent e) { } public void actionPerformed(ActionEvent e) { String command=e.getActionCommand(); RspList rsp_list; Rsp first_rsp; try { if(command.equals("Get")) { String stock_name=stock_field.getText(); if(stock_name == null || stock_name.length() == 0) { showMsg("Stock name is empty !"); return; } showMsg("Looking up value for " + stock_name + ':'); rsp_list=disp.callRemoteMethods(null, "getQuote", new Object[]{stock_name}, new String[]{String.class.getName()}, GroupRequest.GET_ALL, 10000); Float val=null; for(int i=0; i < rsp_list.size(); i++) { Rsp rsp=(Rsp)rsp_list.elementAt(i); Object obj=rsp.getValue(); if(obj == null || obj instanceof Throwable) continue; val=(Float)obj; break; } if(val != null) { value_field.setText(val.toString()); clearMsg(); } else { value_field.setText(""); showMsg("Value for " + stock_name + " not found"); } } else if(command.equals("Set")) { String stock_name=stock_field.getText(); String stock_val=value_field.getText(); if(stock_name == null || stock_val == null || stock_name.length() == 0 || stock_val.length() == 0) { showMsg("Stock name and value have to be present to enter a new value"); return; } Float val=new Float(stock_val); disp.callRemoteMethods(null, "setQuote", new Object[]{stock_name, val}, new Class[]{String.class, Float.class}, GroupRequest.GET_FIRST, 0); showMsg("Stock " + stock_name + " set to " + val); } else if(command.equals("All")) { listbox.removeAll(); showMsg("Getting all stocks:"); rsp_list=disp.callRemoteMethods(null, "getAllStocks", (Object[])null, (Class[])null, GroupRequest.GET_ALL, 5000); System.out.println("rsp_list is " + rsp_list); Hashtable all_stocks=null; for(int i=0; i < rsp_list.size(); i++) { Rsp rsp=(Rsp)rsp_list.elementAt(i); Object obj=rsp.getValue(); if(obj == null || obj instanceof Throwable) continue; all_stocks=(Hashtable)obj; break; } if(all_stocks == null) { showMsg("No stocks found"); return; } clearMsg(); listbox.removeAll(); String key; Float val; for(Enumeration en=all_stocks.keys(); en.hasMoreElements();) { key=(String)en.nextElement(); val=(Float)all_stocks.get(key); if(val == null) continue; listbox.add(key + ": " + val.toString()); } } else if(command.equals("Quit")) { setVisible(false); channel.close(); System.exit(0); } else System.out.println("Unknown action"); } catch(Exception ex) { value_field.setText(""); ex.printStackTrace(); showMsg(ex.toString()); } } public void setQuote(String stock_name, Float value) { ; } public void printAllStocks() { } public void viewAccepted(View new_view) { setTitle("Members in " + channel_name + ": " + (new_view.size() - 1)); } public void suspect(Address suspected_mbr) { } public void block() { } public static void main(String args[]) { QuoteClient client=new QuoteClient(); client.start(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?