OrderBook View is threadsafe now

This commit is contained in:
7u83 2016-12-28 15:20:58 +01:00
parent 806a74014d
commit ce24a82442
6 changed files with 75 additions and 33 deletions

View File

@ -7,25 +7,24 @@
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Trader.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Trader.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/TraderRun.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/TraderRun.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/MTrader.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/MTrader.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/build.xml</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Order.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Order.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/ControlPanel.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/ControlPanel.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBookPanel.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/MainWin.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/MainWin.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBook.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBook.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/manifest.mf</file> <file>file:/home/tube/NetBeansProjects/SeSim/manifest.mf</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/RandomTrader.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Account.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Account.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Exchange.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Exchange.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/Chart.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/Chart.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBookCell.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/TraderRunner.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/AskBook.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/BidBook.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/build.xml</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/OrderBookPanel.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/RandomTrader.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/ThreadedTrader.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/BuyOrder.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/BuyOrder.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/ManTrader.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/Traders/ManTrader.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/README.md</file> <file>file:/home/tube/NetBeansProjects/SeSim/README.md</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/AskBook.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Logger.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/Logger.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/Gui/BidBook.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/SellOrder.java</file> <file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/SellOrder.java</file>
<file>file:/home/tube/NetBeansProjects/SeSim/LICENSE</file> <file>file:/home/tube/NetBeansProjects/SeSim/LICENSE</file>
</group> </group>

View File

@ -37,7 +37,7 @@ public class AskBook extends OrderBook {
@Override @Override
ArrayList getOrderBook() { ArrayList getOrderBook() {
return MainWin.se.getOrderBook(OrderType.ask,10); return MainWin.se.getOrderBook(OrderType.ask,40);
} }
@Override @Override

View File

@ -73,6 +73,7 @@
<Column editable="false" title="Title 3" type="java.lang.Object"/> <Column editable="false" title="Title 3" type="java.lang.Object"/>
</Table> </Table>
</Property> </Property>
<Property name="doubleBuffered" type="boolean" value="true"/>
<Property name="focusable" type="boolean" value="false"/> <Property name="focusable" type="boolean" value="false"/>
</Properties> </Properties>
</Component> </Component>

View File

@ -28,10 +28,9 @@ package Gui;
import SeSim.Exchange; import SeSim.Exchange;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Formatter; import java.util.Formatter;
import java.util.concurrent.Callable;
import javax.swing.table.AbstractTableModel; import javax.swing.table.AbstractTableModel;
import javax.swing.table.JTableHeader; import javax.swing.table.JTableHeader;
import javax.swing.SwingUtilities;
import java.awt.*; import java.awt.*;
import javax.swing.*; import javax.swing.*;
import javax.swing.table.*; import javax.swing.table.*;
@ -40,17 +39,20 @@ import javax.swing.table.*;
* *
* @author 7u83 <7u83@mail.ru> * @author 7u83 <7u83@mail.ru>
*/ */
/** /**
* OderBook Class * OderBook Class
*/ */
public abstract class OrderBook extends javax.swing.JPanel implements Exchange.BookReceiver { public abstract class OrderBook extends javax.swing.JPanel implements Exchange.BookReceiver {
OrderBookListModel model;
abstract ArrayList getOrderBook(); abstract ArrayList getOrderBook();
private Color hdr_color = Color.LIGHT_GRAY; private Color hdr_color = Color.LIGHT_GRAY;
private class OrderBookCellRenderer extends DefaultTableCellRenderer { private class OrderBookCellRenderer extends DefaultTableCellRenderer {
@Override @Override
public Component getTableCellRendererComponent(JTable table, public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus, Object value, boolean isSelected, boolean hasFocus,
@ -65,16 +67,32 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
@Override @Override
public void UpdateOrderBook() { public void UpdateOrderBook() {
// System.out.print("I have got an update on bid\n");
model.update(); class Updater implements Runnable{
OrderBookListModel model;
ArrayList newlist;
@Override
public void run() {
model.update(this.newlist);
} }
Updater(OrderBookListModel model, ArrayList newlist){
this.model = model;
this.newlist = newlist;
}
}
ArrayList newlist = getOrderBook();
SwingUtilities.invokeLater(new Updater(this.model,newlist));
}
boolean getDesc() { boolean getDesc() {
return false; return false;
} }
protected OrderBookListModel model; // protected OrderBookListModel model;
protected class OrderBookListModel extends AbstractTableModel { protected class OrderBookListModel extends AbstractTableModel {
@ -82,15 +100,24 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
private boolean desc = false; private boolean desc = false;
public OrderBookListModel() { public OrderBookListModel() {
update(); System.out.print("CREATING A NEW MODEL\n");
} // update();
public void update(){
list = getOrderBook(); list = getOrderBook();
this.fireTableDataChanged();
} }
int update_calls = 0;
int colcount_calls = 0;
public void update(ArrayList newlist) {
list = newlist; //getOrderBook();
this.fireTableDataChanged();
this.update_calls++;
int hc = this.hashCode();
System.out.print("Update/ColCalls = " + update_calls + "/" + colcount_calls + " HC: " + hc + "\n");
}
@Override @Override
public String getColumnName(int c) { public String getColumnName(int c) {
switch (c) { switch (c) {
@ -106,6 +133,8 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
@Override @Override
public int getRowCount() { public int getRowCount() {
colcount_calls++;
System.out.print("Update/ColCalls = " + update_calls + "/" + colcount_calls + "\n");
return list.size(); return list.size();
} }
@ -117,6 +146,10 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
@Override @Override
public Object getValueAt(int r, int c) { public Object getValueAt(int r, int c) {
SeSim.Order o; SeSim.Order o;
int s = list.size();
//System.out.print("Looking for Value at" + r + ":" + c + " w size:" + s + "\n");
if (!getDesc()) { if (!getDesc()) {
o = (SeSim.Order) list.get(r); o = (SeSim.Order) list.get(r);
} else { } else {
@ -150,9 +183,9 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
return; return;
} }
model = new OrderBookListModel(); this.model = new OrderBookListModel();
this.orderBookList.setModel(model); this.orderBookList.setModel(model);
orderBookList.setBorder(BorderFactory.createEmptyBorder()); orderBookList.setBorder(BorderFactory.createEmptyBorder());
JTableHeader h = this.orderBookList.getTableHeader(); JTableHeader h = this.orderBookList.getTableHeader();
@ -219,6 +252,7 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
return canEdit [columnIndex]; return canEdit [columnIndex];
} }
}); });
orderBookList.setDoubleBuffered(true);
orderBookList.setFocusable(false); orderBookList.setFocusable(false);
orderBookScroller.setViewportView(orderBookList); orderBookScroller.setViewportView(orderBookList);

View File

@ -84,8 +84,16 @@ public class Exchange extends Thread {
while (i.hasNext()) { while (i.hasNext()) {
i.next().UpdateOrderBook(); i.next().UpdateOrderBook();
} }
/* try {
sleep(50);
} catch (InterruptedException e) {
System.out.println("I was Interrupted");
} }
*/
}
// Here we store the list of quote receivers // Here we store the list of quote receivers
private final TreeSet<QuoteReceiver> qrlist; private final TreeSet<QuoteReceiver> qrlist;

View File

@ -55,7 +55,7 @@ public class RandomTrader extends Trader {
private boolean monitorTrades() { private boolean monitorTrades() {
int numpending = account.pending.size(); int numpending = account.pending.size();
System.out.print("RT: Monitoring trades - Pending: "+numpending+"\n"); // System.out.print("RT: Monitoring trades - Pending: "+numpending+"\n");
if (numpending == 0) { if (numpending == 0) {
System.out.print("RT: pending = 0 - return false\n"); System.out.print("RT: pending = 0 - return false\n");
return false; return false;
@ -64,7 +64,7 @@ public class RandomTrader extends Trader {
Order o = account.pending.get(0); Order o = account.pending.get(0);
long age = o.getAge(); long age = o.getAge();
System.out.print("RT: age is: "+age+"\n"); // System.out.print("RT: age is: "+age+"\n");
if (age > 10000) { if (age > 10000) {
account.se.CancelOrder(o); account.se.CancelOrder(o);
@ -72,14 +72,14 @@ public class RandomTrader extends Trader {
return false; return false;
} }
System.out.print("RT: monitor return true\n"); //System.out.print("RT: monitor return true\n");
return true; return true;
} }
public void trade() { public void trade() {
System.out.print("RT: Now trading\n"); // System.out.print("RT: Now trading\n");
if (monitorTrades()) { if (monitorTrades()) {
return; return;