OrderBook View is threadsafe now
This commit is contained in:
parent
806a74014d
commit
ce24a82442
@ -7,25 +7,24 @@
|
||||
<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/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/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/OrderBook.java</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/Exchange.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/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/TraderRunner.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/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/Gui/BidBook.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/src/SeSim/SellOrder.java</file>
|
||||
<file>file:/home/tube/NetBeansProjects/SeSim/LICENSE</file>
|
||||
</group>
|
||||
|
@ -37,7 +37,7 @@ public class AskBook extends OrderBook {
|
||||
|
||||
@Override
|
||||
ArrayList getOrderBook() {
|
||||
return MainWin.se.getOrderBook(OrderType.ask,10);
|
||||
return MainWin.se.getOrderBook(OrderType.ask,40);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -73,6 +73,7 @@
|
||||
<Column editable="false" title="Title 3" type="java.lang.Object"/>
|
||||
</Table>
|
||||
</Property>
|
||||
<Property name="doubleBuffered" type="boolean" value="true"/>
|
||||
<Property name="focusable" type="boolean" value="false"/>
|
||||
</Properties>
|
||||
</Component>
|
||||
|
@ -28,10 +28,9 @@ package Gui;
|
||||
import SeSim.Exchange;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Formatter;
|
||||
import java.util.concurrent.Callable;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import javax.swing.table.JTableHeader;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
import java.awt.*;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.*;
|
||||
@ -40,17 +39,20 @@ import javax.swing.table.*;
|
||||
*
|
||||
* @author 7u83 <7u83@mail.ru>
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* OderBook Class
|
||||
*/
|
||||
public abstract class OrderBook extends javax.swing.JPanel implements Exchange.BookReceiver {
|
||||
|
||||
|
||||
OrderBookListModel model;
|
||||
|
||||
abstract ArrayList getOrderBook();
|
||||
|
||||
private Color hdr_color = Color.LIGHT_GRAY;
|
||||
|
||||
private class OrderBookCellRenderer extends DefaultTableCellRenderer {
|
||||
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table,
|
||||
Object value, boolean isSelected, boolean hasFocus,
|
||||
@ -65,16 +67,32 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
|
||||
|
||||
@Override
|
||||
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() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected OrderBookListModel model;
|
||||
// protected OrderBookListModel model;
|
||||
|
||||
protected class OrderBookListModel extends AbstractTableModel {
|
||||
|
||||
@ -82,15 +100,24 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
|
||||
private boolean desc = false;
|
||||
|
||||
public OrderBookListModel() {
|
||||
update();
|
||||
}
|
||||
|
||||
|
||||
public void update(){
|
||||
System.out.print("CREATING A NEW MODEL\n");
|
||||
// update();
|
||||
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
|
||||
public String getColumnName(int c) {
|
||||
switch (c) {
|
||||
@ -106,6 +133,8 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
|
||||
|
||||
@Override
|
||||
public int getRowCount() {
|
||||
colcount_calls++;
|
||||
System.out.print("Update/ColCalls = " + update_calls + "/" + colcount_calls + "\n");
|
||||
return list.size();
|
||||
}
|
||||
|
||||
@ -117,6 +146,10 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
|
||||
@Override
|
||||
public Object getValueAt(int r, int c) {
|
||||
SeSim.Order o;
|
||||
|
||||
int s = list.size();
|
||||
//System.out.print("Looking for Value at" + r + ":" + c + " w size:" + s + "\n");
|
||||
|
||||
if (!getDesc()) {
|
||||
o = (SeSim.Order) list.get(r);
|
||||
} else {
|
||||
@ -150,9 +183,9 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
|
||||
return;
|
||||
}
|
||||
|
||||
model = new OrderBookListModel();
|
||||
|
||||
this.model = new OrderBookListModel();
|
||||
this.orderBookList.setModel(model);
|
||||
|
||||
orderBookList.setBorder(BorderFactory.createEmptyBorder());
|
||||
|
||||
JTableHeader h = this.orderBookList.getTableHeader();
|
||||
@ -219,6 +252,7 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
|
||||
return canEdit [columnIndex];
|
||||
}
|
||||
});
|
||||
orderBookList.setDoubleBuffered(true);
|
||||
orderBookList.setFocusable(false);
|
||||
orderBookScroller.setViewportView(orderBookList);
|
||||
|
||||
|
@ -84,8 +84,16 @@ public class Exchange extends Thread {
|
||||
while (i.hasNext()) {
|
||||
i.next().UpdateOrderBook();
|
||||
}
|
||||
/* try {
|
||||
sleep(50);
|
||||
} catch (InterruptedException e) {
|
||||
System.out.println("I was Interrupted");
|
||||
}
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
// Here we store the list of quote receivers
|
||||
private final TreeSet<QuoteReceiver> qrlist;
|
||||
|
||||
|
@ -55,7 +55,7 @@ public class RandomTrader extends Trader {
|
||||
private boolean monitorTrades() {
|
||||
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) {
|
||||
System.out.print("RT: pending = 0 - return false\n");
|
||||
return false;
|
||||
@ -64,7 +64,7 @@ public class RandomTrader extends Trader {
|
||||
Order o = account.pending.get(0);
|
||||
long age = o.getAge();
|
||||
|
||||
System.out.print("RT: age is: "+age+"\n");
|
||||
// System.out.print("RT: age is: "+age+"\n");
|
||||
|
||||
if (age > 10000) {
|
||||
account.se.CancelOrder(o);
|
||||
@ -72,14 +72,14 @@ public class RandomTrader extends Trader {
|
||||
return false;
|
||||
}
|
||||
|
||||
System.out.print("RT: monitor return true\n");
|
||||
//System.out.print("RT: monitor return true\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
public void trade() {
|
||||
|
||||
|
||||
System.out.print("RT: Now trading\n");
|
||||
// System.out.print("RT: Now trading\n");
|
||||
|
||||
if (monitorTrades()) {
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user