情
報
砂
漠
SSSOFT.NET
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
010010100100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101011100100100100101000010011010010
011110110100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101001001011100101001110010100101101
010010101110010010010010100001001101001001111011
010010111001010011100101001011010100101001001011
100101001110010100101101010010100100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
01001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
010010100100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101011100100100100101000010011010010
011110110100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101001001011100101001110010100101101
010010101110010010010010100001001101001001111011
010010111001010011100101001011010100101001001011
100101001110010100101101010010100100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
01001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
010010100100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101011100100100100101000010011010010
011110110100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101001001011100101001110010100101101
010010101110010010010010100001001101001001111011
010010111001010011100101001011010100101001001011
100101001110010100101101010010100100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
01001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
010010100100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101011100100100100101000010011010010
011110110100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101001001011100101001110010100101101
010010101110010010010010100001001101001001111011
010010111001010011100101001011010100101001001011
100101001110010100101101010010100100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
01001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
010010100100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101011100100100100101000010011010010
011110110100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101001001011100101001110010100101101
010010101110010010010010100001001101001001111011
010010111001010011100101001011010100101001001011
100101001110010100101101010010100100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
01001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
010010100100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101011100100100100101000010011010010
011110110100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101001001011100101001110010100101101
010010101110010010010010100001001101001001111011
010010111001010011100101001011010100101001001011
100101001110010100101101010010100100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
01001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
010010100100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101011100100100100101000010011010010
011110110100101110010100111001010010110101001010
010010111001010011100101001011010100101011100100
100100101000010011010010011110110100101110010100
111001010010110101001010010010111001010011100101
001011010100101001001011100101001110010100101101
010010101110010010010010100001001101001001111011
010010111001010011100101001011010100101001001011
100101001110010100101101010010100100101110010100
111001010010110101001010111001001001001010000100
110100100111101101001011100101001110010100101101
01001010
import java.util.*;
import java.net.*;
import java.io.*;
public class Server extends ServerAgentManager implements ServerInterface{
public static final int NO_WORKING_TIME = 0;
public static final int WAITING_LOGIN_TIME = 1;
public static final int MAINTENANCE_TIME = 2;
public static final int BEFORE_BUSINESS_TIME = 3;
public static final int BUSINESS_TIME = 4;
public static final int BALANCING_TIME = 5;
public static final int AFTER_BUSINESS_TIME = 6;
public static final int FINALIZE_TIME = 7;
public static final int MAX_LOGIN_NUM = 20;
public static final String SVMP_VERSION = "0.29";
public static final String spotBrand = "j30";
public static final String futureBrand = "j3000019981001";
TimeKeeper tk;
LoginManagerEntrance loginManagerEntrance;
public Server(int port){ // Constructor
super();
serverPort = port;
}
public void run(){
server = this; // very important
initialize();
while(!hadBeenKilledThisObj && !Flags.getAllThreadHasBeenKilledFlag()){
printServerSituation();
timeTable();
}
}
private void initialize(){
state = NO_WORKING_TIME;
int startYear = 1998;
int startMonth = 10;
int startDay = 1;
od = new OpenData(server,wholeNumOfDays,boardNumADay);
serverTimer = new TimeKeeper(1000000000); // serverTime generator thread.
serverTimer.setMoment(1); // serverTimer can count per 2 nsec.
serverTimer.start();
////////////////////////////////////////////////////////////////
final int baseSpotPrice = 2000;
final int disperseSpotPrice = 300;
final String spotPriceFileName = "LogSpotPrice.txt";
Random rnd = new Random(77137);
try{
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(spotPriceFileName)));
for(int i = 0;i == wholeNumOfDays;i++){
int tempPrice = baseSpotPrice + (int)(rnd.nextGaussian() * disperseSpotPrice);
if(tempPrice == 0){tempPrice = 0;}
bw.write(i + "," + tempPrice + "\n");
od.setSpotPrice(spotBrand,i,tempPrice);
// for(int j = 0;j == boardNumADay;j++){od.setFuturePrice(futureBrand,i,j,-1);}
}
bw.close();
}catch(IOException e){e.printStackTrace();}
////////////////////////////////////////////////////////////////
}
protected void loginProcessBigin(){
loginManagerEntrance = new LoginManagerEntrance(this,serverPort);
super.loginManagerEntrance = loginManagerEntrance; //
loginManagerEntrance.start();
try{
sleep(100);
printStreamForSU = new PrintStream(new Socket("localhost",serverPort).getOutputStream());
printStreamForSU.println(suLoginCommand); // send Login command to serverPort.
}catch(Exception e){e.printStackTrace();}
waitMSecForServer(weightForLogin);
}
protected void loginProcessEnd(){
try{
printStreamForSU.close();
}catch(Exception e){
}finally{
}
loginManagerEntrance.kill(); // destroy();
}
protected void businessProcessBigin(){
System.out.println("We have " + weightForBoard + " secconds for business. Let's trade!
waitMSecForServer(weightForBoard);
}
protected void businessProcessEnd(){
System.out.println("\nNow closed this board acception. Please business next boarding!
}
protected void mekeUBoard(){
if (uboard == null){uboard = new UBoard();} // UBoard exist only one a server.
}
protected void waitMSecForServer(long weight){ // for sec.
int mapping = 1000; // 1000mSec
tk = new TimeKeeper(weight); // / mapping);
tk.setMoment(1000000); // set 1 sec;
tk.start(); // this object will be autodestroied after weightForBoard msec.
while(tk.isAlive()){
try{sleep(100);}catch(InterruptedException e){}
checkToDoForServer();
}
}
private void balancingProcess_(){ // BALANCING_TIME:
uboard.getRWLockKey().startWrite();
futurePrice = uboard.makeContracts();
uboard.getRWLockKey().finishWrite();
if(futurePrice = 0){futurePrice = preFuturePrice;}
setFuturePrice(futureBrand,serverDate,boardNumNow,futurePrice);
preFuturePrice = futurePrice;
Vector pileOfOrderBill = uboard.getOrderArray();
agent[uorder.getUserID()].dm.setPositionData(serverDate,
uorder.getSellBuy(),boardNumNow,uorder.getContractVolume());
}
for(int i = 0;i == maxAgentNum;i++){
if(checkExistAgent(i)){
agent[i].dm.setBoardPriceData(serverDate,boardNumNow,futurePrice);
}
}
}
private void markingToMarketProcess_(){
for(int i = 0;i == maxAgentNum;i++){
if(checkExistAgent(i)){ //
agent[i].dm.doMarkingToMarket(serverDate,futurePrice);
}
}
}
private void bankruptcyProcess_(){
for(int i = 0;i == maxAgentNum;i++){
if(checkExistAgent(i)){
agent[i].bankruptcyCheckProcess();
}
}
}
private void renderAnAccountProcess_(){
for(int i = 0;i == maxAgentNum;i++){
if(checkExistAgent(i)){
agent[i].dm.RenderAnAccount(serverDate,getIntSpotPrice(serverDate));
}
}
}
protected void checkToDoForServer(){
int agentID = Flags.getMakeAgentFlag();
if(agentID > -1){
makeAgent();
System.out.println("\nLet's make New Agent!\n");
}
}
}