import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; simple component Client { static final int Q1 = 1; static final int Q2 = 1; static final int Q3 = 1; static final int Q4 = 1; static final int Q5 = 1; JFrame mainFrame; JFrame loginFrame; JTextField userName; JTextField password; JList peers; JTextArea chatArea; JTextField chatField; JFrame chatFrame; String title = ""; port P { provided { void loginOk(); void loginNotOk(); void openOk(); void openNotOk(); void receiveMessage(String message); void openChannel(); void closedByPeer(); } required { void login(String login, String password); void logout(); java.util.List getPeers(); void openChannel(String nickName); void sendMessage(String message); void close(); } protocol q1; q1 -> q2 { effect ^out.login(); } q2 -> q1 { trigger loginNotOk; } q2 -> q3 { trigger loginOk; } q3 -> q1 { effect ^out.logout();} q3 -> q4 { effect ^out.openChannel(); } q3 -> q3 { effect ^out.getPeers(); } q4 -> q3 { trigger openNotOk; } q4 -> q5 { trigger openOk; } q3 -> q5 { trigger openChannel; } q5 -> q3 { trigger openChannel; } q5 -> q5 { effect ^out.sendMessage(); } q5 -> q5 { trigger receiveMessage; } q5 -> q3 { trigger closedByPeer; } } } !> } constructor Client() { init(); } void loginOk() implements P.loginOk() { System.out.println("Login ok"); loginFrame.setVisible(false); mainFrame(); } void loginNotOk() implements P.loginNotOk() { System.out.println("Login not ok"); loginFrame(); } void openOk() implements P.openOk () { mainFrame.setVisible(false); chatFrame(); } void openNotOk() implements P.openNotOk() { Toolkit.getDefaultToolkit().beep(); } void receiveMessage(String message) implements P.receiveMessage(String) { if (chatArea == null) { System.out.println("Error ... sollte nicht vorkommen :-("); return; } chatArea.append(message + "\n"); } void openChannel() implements P.openChannel() { mainFrame.setVisible(false); chatFrame(); } void closedByPeer() implements P.closedByPeer() { chatFrame.setVisible(false); mainFrame(); } void init() { loginFrame(); } void loginFrame() { loginFrame = new JFrame("Login"); loginFrame.setSize(300,150); loginFrame.setVisible(true); loginFrame.getContentPane().setLayout(new FlowLayout()); JButton b = new JButton("Los"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { internalLogin(); } }); JLabel uLabel = new JLabel("Kennung:"); loginFrame.getContentPane().add(uLabel); userName = new JTextField(15); loginFrame.getContentPane().add(userName); JLabel pwLabel = new JLabel("Passwort:"); loginFrame.getContentPane().add(pwLabel); password = new JTextField(15); loginFrame.getContentPane().add(password); loginFrame.getContentPane().add(b); loginFrame.setVisible(true); } void internalLogin() { title = userName.getText().trim(); loginFrame.setVisible(false); P.login(userName.getText().trim(), password.getText().trim()); } void mainFrame() { mainFrame = new JFrame("Chat: " + title); mainFrame.setSize(300,400); mainFrame.getContentPane().setLayout(new BorderLayout()); peers = new JList(P.getPeers().toArray()); mainFrame.getContentPane().add(peers, BorderLayout.CENTER); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); JButton b = new JButton("Update"); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updatePeers(); } }); panel.add(b); JButton b2 = new JButton("Connect"); b2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { internalOpenChannel(); } }); panel.add(b2); JButton b3 = new JButton("Logout"); b3.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { internalLogout(); } }); panel.add(b3); mainFrame.getContentPane().add(panel, BorderLayout.SOUTH); mainFrame.setVisible(true); } void updatePeers() { java.util.List p = P.getPeers(); peers.setListData(p.toArray()); peers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); mainFrame.repaint(); } void internalLogout() { mainFrame.setVisible(false); P.logout(); loginFrame(); } void internalOpenChannel() { Object o = peers.getSelectedValue(); if (o == null) return; String nickName = (String)o; P.openChannel(nickName); } void chatFrame() { chatFrame = new JFrame("Chat: " + title); chatFrame.setSize(500,400); chatFrame.getContentPane().setLayout(new BorderLayout()); chatArea = new JTextArea(); chatArea.setEditable(false); chatFrame.getContentPane().add(chatArea, BorderLayout.CENTER); JPanel panel = new JPanel(); panel.setLayout(new FlowLayout()); chatField = new JTextField(30); panel.add(chatField); JButton button = new JButton("Send"); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { internalSend(); } }); JButton button2 = new JButton("Close"); button2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { internalClose(); } }); panel.add(button); panel.add(button2); chatFrame.getContentPane().add(panel, BorderLayout.SOUTH); chatFrame.setVisible(true); } void internalSend() { String send = chatField.getText().trim(); chatField.setText(""); chatArea.append("*** " + send + "\n"); P.sendMessage(send); } void internalClose() { chatFrame.setVisible(false); mainFrame(); P.close(); } }