[virtualcommons-svn] commit/foraging: alllee: cleaning up ChatPanel implementation and working on s
Status: Beta
Brought to you by:
alllee
From: Bitbucket <com...@bi...> - 2011-09-09 00:50:44
|
1 new changeset in foraging: http://bitbucket.org/virtualcommons/foraging/changeset/b62a4c6e49b1/ changeset: b62a4c6e49b1 user: alllee date: 2011-09-09 02:51:36 summary: cleaning up ChatPanel implementation and working on some UI improvements for consistency and clarity. affected #: 9 files (9.7 KB) --- a/src/main/java/edu/asu/commons/foraging/client/ChatPanel.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/ChatPanel.java Thu Sep 08 17:51:36 2011 -0700 @@ -2,21 +2,10 @@ import java.awt.BorderLayout; import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JButton; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JPanel; @@ -28,23 +17,16 @@ import javax.swing.text.StyleConstants; import javax.swing.text.StyleContext; import javax.swing.text.StyledDocument; -import javax.swing.text.html.HTMLEditorKit; import edu.asu.commons.event.ChatEvent; import edu.asu.commons.event.ChatRequest; import edu.asu.commons.event.EventTypeProcessor; import edu.asu.commons.net.Identifier; - - - /** * $Id: ChatPanel.java 516 2010-05-10 23:31:53Z alllee $ * - * Chat panel used to communicate with other players. - * - * FIXME: randomize handle mappings (e.g., A -> 3, B -> 1, C -> 4, D -> 2 ...) so that it's - * not linear. + * Chat panel used to communicate with other players. * * @author alllee * @version $Revision: 516 $ @@ -53,55 +35,118 @@ public class ChatPanel extends JPanel { private ForagingClient client; - - private boolean inRoundChat = false; + + private JScrollPane messageScrollPane; + + private JTextPane messageWindow; + + private List<Identifier> participants; + + private TextEntryPanel textEntryPanel; + + private JEditorPane chatInstructionsPane; public ChatPanel(ForagingClient client) { this.client = client; - this.clientId = client.getId(); client.getEventChannel().add(this, new EventTypeProcessor<ChatEvent>(ChatEvent.class) { public void handle(final ChatEvent chatEvent) { - displayMessage(getChatHandle(chatEvent.getSource()) -// FIXME: either "all" or "you". -// + " -> " + getChatHandle(chatEvent.getTarget()) - ,chatEvent.toString()); + displayMessage(chatEvent.getSource(), chatEvent.toString()); } }); + initGuiComponents(); } + + private void addStylesToMessageWindow() { + StyledDocument styledDocument = messageWindow.getStyledDocument(); + Style defaultStyle = StyleContext.getDefaultStyleContext().getStyle( + StyleContext.DEFAULT_STYLE); + StyleConstants.setFontFamily(defaultStyle, "Helvetica"); + StyleConstants.setBold(styledDocument.addStyle("bold", defaultStyle), + true); + StyleConstants.setItalic(styledDocument + .addStyle("italic", defaultStyle), true); + } + + private void initGuiComponents() { + setLayout(new BorderLayout(3, 3)); + setName("Chat panel"); + messageWindow = new JTextPane(); + messageWindow.setEditable(false); + messageWindow.setBackground(Color.WHITE); + messageScrollPane = new JScrollPane(messageWindow); + addStylesToMessageWindow(); + + textEntryPanel = new TextEntryPanel(client); + // orient the components in true lazyman fashion. + +// chatInstructionsPane = new JEditorPane(); +// chatInstructionsPane.setContentType("text/html"); +// chatInstructionsPane.setEditorKit(new HTMLEditorKit()); +// chatInstructionsPane.setEditable(false); +// chatInstructionsPane.setBackground(Color.WHITE); +// JScrollPane chatInstructionsScrollPane = new JScrollPane(chatInstructionsPane); +// chatInstructionsPane.setText(client.getCurrentRoundConfiguration().getChatInstructions()); +// add(chatInstructionsScrollPane, BorderLayout.NORTH); + + add(textEntryPanel, BorderLayout.NORTH); + add(messageScrollPane, BorderLayout.CENTER); + } + + public void setTextFieldFocus() { + textEntryPanel.setChatFieldFocus(); + } + + public TextEntryPanel getTextEntryPanel() { + return textEntryPanel; + } + + public JScrollPane getMessageScrollPane() { + return messageScrollPane; + } + + public void clear() { + participants.clear(); + } + + private void displayMessage(Identifier identifier, String message) { + StyledDocument document = messageWindow.getStyledDocument(); + try { + String source = identifier.getChatHandle() + " : "; + document.insertString(0, source, document.getStyle("bold")); + document.insertString(source.length(), message + "\n", null); + messageWindow.setCaretPosition(0); + } catch (BadLocationException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + public void initialize() { + this.participants = client.getDataModel().getAllClientIdentifiers(); + } + private class TextEntryPanel extends JPanel { - private JLabel targetHandleLabel; + + private static final long serialVersionUID = -4846486696999203769L; private Identifier targetIdentifier = Identifier.ALL; private JTextField chatField; - public TextEntryPanel() { - super(); + public TextEntryPanel(ForagingClient client) { setLayout(new BorderLayout(3, 3)); chatField = new JTextField(); chatField.addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent event) { - // System.err.println("event keycode is: " + - // event.getKeyCode()); - // System.err.println("vk_enter: " + KeyEvent.VK_ENTER); if (event.getKeyCode() == KeyEvent.VK_ENTER) { sendMessage(); } } }); - JPanel targetHandlePanel = new JPanel(); - targetHandlePanel.setLayout(new BoxLayout(targetHandlePanel, BoxLayout.LINE_AXIS)); - targetHandleLabel = new JLabel("everyone"); - targetHandleLabel.setFont(new Font("Arial", Font.BOLD, 14)); - targetHandleLabel.setForeground(new Color(0x0000dd)); - targetHandlePanel.add(new JLabel(" Chatting with: ")); - targetHandlePanel.add(targetHandleLabel); - - add(targetHandlePanel, BorderLayout.NORTH); + add(new JLabel("In round chat"), BorderLayout.NORTH); add(chatField, BorderLayout.CENTER); - setChatFieldFocus(); } - private void setChatFieldFocus() { + void setChatFieldFocus() { chatField.requestFocusInWindow(); } @@ -111,9 +156,10 @@ if (message == null || "".equals(message) || targetIdentifier == null) { return; } - client.transmit(new ChatRequest(clientId, message, targetIdentifier)); - if (inRoundChat) { - client.getGameWindow().getPanel().requestFocusInWindow(); + client.transmit(new ChatRequest(client.getId(), message, targetIdentifier)); + // special case for in round chat + if (client.getCurrentRoundConfiguration().isInRoundChatEnabled()) { + client.getGameWindow().requestFocusInWindow(); } else { chatField.requestFocusInWindow(); @@ -121,185 +167,6 @@ chatField.setText(""); } - private void setTargetHandle(Identifier targetIdentifier) { - this.targetIdentifier = targetIdentifier; - if (targetIdentifier == Identifier.ALL) { - targetHandleLabel.setText("everyone"); - } else { - targetHandleLabel.setText(getChatHandle(targetIdentifier)); - } - setChatFieldFocus(); - } - } - - private final static String HANDLE_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - - private String[] HANDLES; - - private Identifier clientId; - - private JScrollPane messageScrollPane; - - private JTextPane messageWindow; - - // used by the participant to select which participant to send a message to. - private JPanel participantButtonPanel; - - private List<Identifier> participants; - - private TextEntryPanel textEntryPanel; - - private JEditorPane chatInstructionsPane; - - private void addStylesToMessageWindow() { - StyledDocument styledDocument = messageWindow.getStyledDocument(); - // and why not have something like... StyleContext.getDefaultStyle() to - // replace this junk - Style defaultStyle = StyleContext.getDefaultStyleContext().getStyle( - StyleContext.DEFAULT_STYLE); - // Style regularStyle = styledDocument.addStyle("regular", - // defaultStyle); - StyleConstants.setFontFamily(defaultStyle, "Helvetica"); - StyleConstants.setBold(styledDocument.addStyle("bold", defaultStyle), - true); - StyleConstants.setItalic(styledDocument - .addStyle("italic", defaultStyle), true); - } - - private String getChatHandle(Identifier source) { - if (source.equals(Identifier.ALL)) { - return "all"; - } - else { - String chatHandle = HANDLES[participants.indexOf(source)]; - if (source.equals(clientId)) { - return chatHandle.concat(" (you)"); - } - return chatHandle; - } - } - - private void initGuiComponents() { - setLayout(new BorderLayout(3, 3)); - setName("Chat panel"); - messageWindow = new JTextPane(); - messageWindow.setEditable(false); - messageWindow.setBackground(Color.WHITE); - messageScrollPane = new JScrollPane(messageWindow); - addStylesToMessageWindow(); - - // set up the participant panel - participantButtonPanel = new JPanel(); - // participantButtonPanel.setLayout(new - // BoxLayout(participantButtonPanel, - // BoxLayout.PAGE_AXIS)); - participantButtonPanel.setLayout(new GridLayout(0, 1)); - participantButtonPanel.setBackground(Color.GRAY); - // JLabel selfLabel = new JLabel(getChatHandle(clientId)); - // selfLabel.setForeground(Color.ORANGE); - // selfLabel.setBackground(Color.ORANGE); - // selfLabel.setAlignmentX(Component.CENTER_ALIGNMENT); - JButton selfButton = new JButton(getChatHandle(clientId)); - selfButton.setEnabled(false); - selfButton.setAlignmentX(Component.CENTER_ALIGNMENT); - participantButtonPanel.add(selfButton); - participantButtonPanel.add(Box.createRigidArea(new Dimension(0, 15))); - for (final Identifier targetId: participants) { - if (targetId.equals(clientId)) { - continue; - } - JButton button = new JButton(getChatHandle(targetId)); - button.setAlignmentX(JButton.CENTER_ALIGNMENT); - button.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - // change stuff in the messageEntryPanel - textEntryPanel.setTargetHandle(targetId); - } - }); - participantButtonPanel.add(button); - } - // special case to send a message to everyone - JButton sendAllButton = new JButton(" all "); - sendAllButton.setAlignmentX(Component.CENTER_ALIGNMENT); - sendAllButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - textEntryPanel.setTargetHandle(Identifier.ALL); - } - }); - participantButtonPanel.add(sendAllButton); - - textEntryPanel = new TextEntryPanel(); - // orient the components in true lazyman fashion. - - chatInstructionsPane = new JEditorPane(); - chatInstructionsPane.setContentType("text/html"); - chatInstructionsPane.setEditorKit(new HTMLEditorKit()); - chatInstructionsPane.setEditable(false); - chatInstructionsPane.setBackground(Color.WHITE); - JScrollPane chatInstructionsScrollPane = new JScrollPane(chatInstructionsPane); - chatInstructionsPane.setText(client.getCurrentRoundConfiguration().getChatInstructions()); - -// add(chatInstructionsScrollPane, BorderLayout.NORTH); - add(new JLabel("In round chat"), BorderLayout.NORTH); - add(messageScrollPane, BorderLayout.CENTER); - add(textEntryPanel, BorderLayout.SOUTH); - textEntryPanel.setChatFieldFocus(); - } - - public void setTextFieldFocus() { - textEntryPanel.setChatFieldFocus(); - } - - public TextEntryPanel getTextEntryPanel() { - return textEntryPanel; - } - - public JScrollPane getMessageScrollPane() { - return messageScrollPane; - } - - public void clear() { - participants.clear(); - } - - private void displayMessage(String chatHandle, String message) { - // String chatHandle = getChatHandle(source); - StyledDocument document = messageWindow.getStyledDocument(); - try { - document.insertString(document.getLength(), chatHandle + " : ", - document.getStyle("bold")); - document.insertString(document.getLength(), message + "\n", null); - messageWindow.setCaretPosition(document.getLength()); - } catch (BadLocationException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - - public void initialize(boolean inRoundChat) { - this.inRoundChat = inRoundChat; - if (HANDLES != null) { - displayMessage("System message", " --- Round ended --- "); - return; - } - this.participants = client.getDataModel().getAllClientIdentifiers(); - HANDLES = new String[participants.size()]; - List<String> handles = new ArrayList<String>(); - if (client.getDataModel().getRoundConfiguration().isChatAnonymized()) { - for (int i = HANDLES.length; --i >= 0;) { - handles.add(HANDLE_STRING.charAt(i) + ""); - } - Collections.shuffle(handles); - for (int i = 0; i < HANDLES.length; i++) { - HANDLES[i] = handles.get(i); - } - } - else { - for (int i = 0; i < HANDLES.length; i++) { - HANDLES[i] = client.getDataModel().getAssignedNumber(participants.get(i)) + ""; - } - } - initGuiComponents(); } } --- a/src/main/java/edu/asu/commons/foraging/client/EmbeddedChatPanel.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/EmbeddedChatPanel.java Thu Sep 08 17:51:36 2011 -0700 @@ -147,6 +147,7 @@ + getChatHandle(chatEvent.getTarget()), chatEvent.toString()); } }); + initGuiComponents(); } public void stop() { @@ -192,60 +193,7 @@ messageScrollPane.setMaximumSize(messageWindowSize); addStylesToMessageWindow(); - // set up the participant panel -// participantButtonPanel = new JPanel(); -// // participantButtonPanel.setLayout(new -// // BoxLayout(participantButtonPanel, -// // BoxLayout.PAGE_AXIS)); -// participantButtonPanel.setLayout(new GridLayout(0, 1)); -// participantButtonPanel.setBackground(Color.GRAY); -// // JLabel selfLabel = new JLabel(getChatHandle(clientId)); -// // selfLabel.setForeground(Color.ORANGE); -// // selfLabel.setBackground(Color.ORANGE); -// // selfLabel.setAlignmentX(Component.CENTER_ALIGNMENT); -// JButton selfButton = new JButton(getChatHandle(clientId)); -// selfButton.setEnabled(false); -// selfButton.setAlignmentX(Component.CENTER_ALIGNMENT); -// participantButtonPanel.add(selfButton); -// participantButtonPanel.add(Box.createRigidArea(new Dimension(0, 15))); -// for (int i = 0; i < HANDLES.length; i++) { -// final Identifier targetId = participants.get(i); -// if (targetId.equals(clientId)) { -// continue; -// } -// String handle = HANDLES[i]; -// JButton button = new JButton(handle); -// button.setAlignmentX(Component.CENTER_ALIGNMENT); -// button.addActionListener(new ActionListener() { -// public void actionPerformed(ActionEvent e) { -// // change stuff in the messageEntryPanel -// textEntryPanel.setTargetHandle(targetId); -// } -// }); -// participantButtonPanel.add(button); -// } -// // special case to send a message to everyone -// JButton sendAllButton = new JButton(" all "); -// sendAllButton.setAlignmentX(Component.CENTER_ALIGNMENT); -// sendAllButton.addActionListener(new ActionListener() { -// public void actionPerformed(ActionEvent e) { -// textEntryPanel.setTargetHandle(Identifier.ALL); -// } -// }); -// participantButtonPanel.add(sendAllButton); - textEntryPanel = new TextEntryPanel(); - // orient the components in true lazyman fashion. - -// chatInstructionsPane = new JEditorPane(); -// chatInstructionsPane.setContentType("text/html"); -// chatInstructionsPane.setEditorKit(new HTMLEditorKit()); -// chatInstructionsPane.setEditable(false); -// JScrollPane chatInstructionsScrollPane = new JScrollPane(chatInstructionsPane); -// chatInstructionsPane.setText(CHAT_INSTRUCTIONS); - - -// add(chatInstructionsScrollPane, BorderLayout.NORTH); add(messageScrollPane, BorderLayout.CENTER); add(textEntryPanel, BorderLayout.SOUTH); } @@ -285,6 +233,5 @@ for (int i = HANDLES.length; --i >= 0;) { HANDLES[i] = " " + HANDLE_STRING.charAt(i) + " "; } - initGuiComponents(); } } --- a/src/main/java/edu/asu/commons/foraging/client/GameWindow.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/GameWindow.java Thu Sep 08 17:51:36 2011 -0700 @@ -21,5 +21,6 @@ public void showInstructions(); public void showTrustGame(); public JPanel getPanel(); + public void requestFocusInWindow(); } --- a/src/main/java/edu/asu/commons/foraging/client/GameWindow2D.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/GameWindow2D.java Thu Sep 08 17:51:36 2011 -0700 @@ -341,7 +341,7 @@ htmlPane.setEditable(false); htmlPane.setDoubleBuffered(true); htmlPane.setBackground(Color.WHITE); - htmlPane.setFont(new Font("sansserif", Font.PLAIN, 12)); + htmlPane.setFont(new Font("Trebuchet MS", Font.PLAIN, 15)); return htmlPane; } @@ -389,7 +389,7 @@ messagePanel.add(new JLabel("Messages"), BorderLayout.NORTH); messageTextPane = new JTextPane(); messageTextPane.setEditable(false); - messageTextPane.setFont(new Font("arial", Font.BOLD, 12)); + messageTextPane.setFont(new Font("Trebuchet MS", Font.BOLD, 15)); messageTextPane.setBackground(Color.WHITE); addStyles(messageTextPane.getStyledDocument()); messageScrollPane = new JScrollPane(messageTextPane); @@ -577,7 +577,7 @@ update(configuration.getRoundDuration().getTimeLeft()); if (configuration.isInRoundChatEnabled()) { ChatPanel chatPanel = getChatPanel(); - chatPanel.initialize(true); + chatPanel.initialize(); Dimension chatPanelSize = new Dimension(250, getPanel().getSize().height); chatPanel.setPreferredSize(chatPanelSize); // FIXME: switch to different layout manager @@ -802,7 +802,7 @@ SwingUtilities.invokeLater(new Runnable() { public void run() { ChatPanel chatPanel = getChatPanel(); - chatPanel.initialize(false); + chatPanel.initialize(); showPanel(CHAT_PANEL_NAME); startChatTimer(); } @@ -817,4 +817,10 @@ public JPanel getPanel() { return mainPanel; } + + @Override + public void requestFocusInWindow() { + getPanel().requestFocusInWindow(); + + } } --- a/src/main/java/edu/asu/commons/foraging/client/GameWindow3D.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/client/GameWindow3D.java Thu Sep 08 17:51:36 2011 -0700 @@ -240,4 +240,9 @@ public String getChatHandle(Identifier id) { return chatPanel.getChatHandle(id); } + + @Override + public void requestFocusInWindow() { + getPanel().requestFocusInWindow(); + } } --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java Thu Sep 08 17:51:36 2011 -0700 @@ -566,11 +566,16 @@ public StringBuilder buildInstructions(StringBuilder instructionsBuilder) { if (isFirstRound()) { instructionsBuilder.append(getGeneralInstructions()); + instructionsBuilder.append(getInstructions()); } - instructionsBuilder.append(getInstructions()); - addAllSpecialInstructions(instructionsBuilder); + else { + // FIXME: dirty hack, need to fix after we paginate things + instructionsBuilder.append(getInstructions()); + addAllSpecialInstructions(instructionsBuilder); + } // and add the quiz instructions if the quiz is enabled. if (isQuizEnabled()) { + instructionsBuilder.append("<h1>Quiz</h1>").append("<hr>"); instructionsBuilder.append(getQuizInstructions()); } return instructionsBuilder; --- a/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/conf/ServerConfiguration.java Thu Sep 08 17:51:36 2011 -0700 @@ -77,7 +77,7 @@ public String getFieldOfVisionInstructions() { return assistant.getProperty("field-of-vision-instructions", - "Your vision is limited in this experiment. The area that is visible to you will be shaded."); + "Your view of the resource will be limited in this round. The area visible to you will be shaded."); } --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java Thu Sep 08 17:51:36 2011 -0700 @@ -234,9 +234,6 @@ @Override public void handle(SocketIdentifierUpdateRequest request) { SocketIdentifier socketId = request.getSocketIdentifier(); - //getLogger().info("socket id from client: " + socketId); - //getLogger().info("station number from client: " + socketId.getStationNumber()); - //getLogger().info("station number from event: " + request.getStationNumber()); ClientData clientData = clients.get(socketId); if (clientData == null) { getLogger().warning("No client data available for socket: " + socketId); --- a/src/main/resources/configuration/asu-experiments/fall-2011/pretest/server.xml Thu Sep 01 15:16:10 2011 -0700 +++ b/src/main/resources/configuration/asu-experiments/fall-2011/pretest/server.xml Thu Sep 08 17:51:36 2011 -0700 @@ -37,9 +37,12 @@ <entry key="welcome-instructions"><![CDATA[ -<h3>Welcome to the experiment. The experiment will begin shortly after everyone has been -assigned a station.</h3> +<h1>Welcome</h1> +<hr><p> +Welcome to the experiment. The experiment will begin shortly after everyone has been +assigned a station. +<br><br> Please <b>wait quietly</b> and <b>do not close this window or open any other applications</b>. </p> ]]> @@ -47,7 +50,7 @@ <entry key="general-instructions"><![CDATA[ -<h3>General Instructions</h3> +<h1>General Instructions</h1><p> Welcome. You have already earned 5 dollars by showing up at this experiment. You can earn more, up to a maximum of about 40 dollars, by participating in this experiment, which @@ -56,7 +59,7 @@ six rounds of the experiment. </p><p> - You will appear on the screen as a yellow dot <img src="@CODEBASE_URL@/images/gem-self.gif"></img>. +You will appear on the screen as a yellow dot <img src="@CODEBASE_URL@/images/gem-self.gif"></img>. You can move by pressing the four arrow keys on your keyboard. You can move up, down, left, or right. You have to press a key for each and every move of your yellow dot. In this experiment you can collect green diamond shaped tokens @@ -92,7 +95,8 @@ </tr></table> -<h3>Best Strategy</h3> +<h2>Best Strategy</h2> +<hr><p> The chance that a token will regenerate on an empty cell increases as there are more tokens surrounding it. Therefore, you want to have as many tokens around an @@ -108,7 +112,8 @@ <entry key='trust-game-instructions'><![CDATA[ -<h3>Trust Game Instructions</h3> +<h1>Trust Game Instructions</h1> +<hr><p> You will now play a mini-game where you will be matched with a random person in your group. In this game there are two roles, Player 1 and Player 2. Your job @@ -118,7 +123,8 @@ the <b>end of the experiment</b>. </p> -<h3>Game Mechanics</h3> +<h2>Game Mechanics</h2> +<hr><p> The game works as follows: </p> @@ -141,24 +147,4 @@ </p> ]]></entry> -<entry key='in-round-chat-instructions'> - <![CDATA[ -<p> -You can chat with all other <b>visible</b> participants in your group <b>during this round</b>. -You may communicate about any aspect of the experiment that you would like to -discuss with other participants with whom you have been matched. You may not promise -them side-payments after the experiment is completed or threaten them with any -consequence after the experiment is finished. We are monitoring the chat traffic -while you chat. If we see that somebody reveals his or her identity, we have to stop -the experiment and remove the whole group from which this person is a member out of -this room. -</p> -<p> -You will see other participants labeled as "1", "2","3", "4", or "5" in the chat -box. You can send a chat message by hitting the enter key, typing into the -textfield and then pressing the enter key again. You must hit the enter key before -you enter each message. -</p> - ]]> -</entry></properties> Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |