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/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>
|
||||||
|
@ -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
|
||||||
|
@ -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>
|
||||||
|
@ -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,
|
||||||
@ -62,19 +64,35 @@ public abstract class OrderBook extends javax.swing.JPanel implements Exchange.B
|
|||||||
return renderer;
|
return renderer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@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);
|
||||||
|
|
||||||
|
@ -84,7 +84,15 @@ 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;
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user