//TODO doesnt work: may have to sync threads. public static Boolean trade(ClientHandler oldOwner, ClientHandler newOwner, Stock stock) { Console.WriteLine(newOwner.getID() + " is in trade"); // UNCOMMENT FOR TESTING IF A TRADER DISCONNECTS MID-TRADE /* * try { * Thread.sleep(10000); * } catch (InterruptedException e) { * e.printStackTrace(); * } */ lock (fileLock){ //ClientHandler oldOwner = stock.getOwner(); if (oldOwner == stock.getOwner()) { //Check if the owner is also the buyer if (stock.getOwner() == newOwner) { Console.WriteLine("stock owner: " + stock.getOwner().getID()); Console.WriteLine("new owner: " + newOwner.getID()); newOwner.sendMessage("Buy/Sell failed: cannot sell to owner."); Console.WriteLine("There was an attempted trade of: " + stock.getName() + " but failed, because the owner tried to trade with themselves."); return(false); } else { stock.setOwner(newOwner); Console.WriteLine("new owner: " + stock.getOwner().getID()); //Check that new owner has been assigned if (stock.getOwner() == newOwner) { if ((oldOwner.isConnected()) && (newOwner.isConnected())) //Check if traders are still connected before finalisation of trade. { String updateMsg = "[UPDATE]Stock is now owned by trader: " + Market.getStock("sample stock").getOwner().getID(); updateMarket(updateMsg); return(true); } else { stock.setOwner(oldOwner); Console.WriteLine("new owner offline"); return(false); } } else { Console.WriteLine("Stock owner was unable to be changed."); return(false); } } } else { Console.WriteLine("client: " + oldOwner.getID() + " tried to sell the stock, but are not the owner."); return(false); } } }