From b8e779927cf6869fed2bc6b3fc1c84bdc1078f51 Mon Sep 17 00:00:00 2001 From: mrbesen Date: Mon, 31 Jul 2017 14:00:08 +0200 Subject: [PATCH] should fix #2 --- .../src/Comunication/Client.java | 22 +++++++++++++++++++ .../src/Comunication/Server.java | 6 +++-- Server/BesenBoincServer/src/Core/Program.java | 2 +- .../BesenBoincServer/src/Job/JobManager.java | 22 ++++++++++++++----- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/Server/BesenBoincServer/src/Comunication/Client.java b/Server/BesenBoincServer/src/Comunication/Client.java index 7d145a4..922b22b 100755 --- a/Server/BesenBoincServer/src/Comunication/Client.java +++ b/Server/BesenBoincServer/src/Comunication/Client.java @@ -5,6 +5,11 @@ import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.InetAddress; import java.net.Socket; +import java.util.LinkedList; +import java.util.List; + +import Comunication.Data.ContentType; +import Job.Job; public class Client implements Runnable{ private Socket soc; @@ -13,6 +18,8 @@ public class Client implements Runnable{ private PacketHandler handler; private boolean hold_connection; + + private List takenjobs = new LinkedList(); public Client(Socket soc, PacketHandler hand) {//server side constructor hold_connection = true; @@ -43,6 +50,9 @@ public class Client implements Runnable{ try { out.writeObject(data); out.flush(); + if(data.type == ContentType.Job) { + takenjobs.add((Job) data.content); + } } catch (IOException e) { e.printStackTrace(); } @@ -56,6 +66,9 @@ public class Client implements Runnable{ out.close(); soc.close(); System.out.println("Disconnected!"); + //re-enque all take jobs + Server.getServer().getProgram().jobmanager.reenque(takenjobs); + takenjobs.clear(); } catch (IOException e) { e.printStackTrace(); } @@ -75,6 +88,15 @@ public class Client implements Runnable{ } disconnect(); } + + void removetakenjob(int jobid) { + for(int i = 0; i < takenjobs.size(); i++) { + if(takenjobs.get(i).getId() == jobid) { + takenjobs.remove(i); + break; + } + } + } public boolean hasConnection() { return soc.isConnected(); diff --git a/Server/BesenBoincServer/src/Comunication/Server.java b/Server/BesenBoincServer/src/Comunication/Server.java index fad982f..5057eca 100755 --- a/Server/BesenBoincServer/src/Comunication/Server.java +++ b/Server/BesenBoincServer/src/Comunication/Server.java @@ -119,9 +119,11 @@ public class Server implements PacketHandler { } else { System.out.println("Out of Tasks"); } - } + } } else if(data.type == ContentType.Result) { - prog.HandleResult((Result) data.content); + Result r = (Result) data.content; + c.removetakenjob(r.getJobId()); + prog.HandleResult(r); }else System.out.println("unhandled Data!"); } diff --git a/Server/BesenBoincServer/src/Core/Program.java b/Server/BesenBoincServer/src/Core/Program.java index c1fcb40..98da7db 100755 --- a/Server/BesenBoincServer/src/Core/Program.java +++ b/Server/BesenBoincServer/src/Core/Program.java @@ -4,7 +4,7 @@ import Job.JobManager; import Job.Result; import Job.Result.PartialResult; -public abstract class Program implements Runnable{ +public abstract class Program implements Runnable { public JobManager jobmanager = new JobManager(); diff --git a/Server/BesenBoincServer/src/Job/JobManager.java b/Server/BesenBoincServer/src/Job/JobManager.java index 05c28b1..30e73a5 100755 --- a/Server/BesenBoincServer/src/Job/JobManager.java +++ b/Server/BesenBoincServer/src/Job/JobManager.java @@ -23,6 +23,12 @@ public class JobManager implements Iterator{ private boolean isCompiling = false; + public void reenque(List jobs) { + todo.addAll(0, jobs); + send.removeAll(jobs); + update(); + } + public void enque(Job newjob) { jobcount++; newjob.setId(jobcount); @@ -30,6 +36,10 @@ public class JobManager implements Iterator{ update(); } + /** + * Creates a new Compiling Thread + * @return + */ private Thread getnewThread() { return new Thread(new Runnable() { @Override @@ -94,6 +104,9 @@ public class JobManager implements Iterator{ }, "Compiler"); } + /** + * is a new Compiled job in the list + */ @Override public boolean hasNext() { return todo.size() != 0; @@ -108,11 +121,6 @@ public class JobManager implements Iterator{ return send.get(send.size()-1); } - @Override - public void remove() {//unused - - } - public void update() {//called from Server on new Client Connection if(enqued.size() > 0 & !isCompiling & todo.size() < jobs_compiledtarget()) {//7 für jede connection vorrätig startCompile(); @@ -137,6 +145,10 @@ public class JobManager implements Iterator{ return jobcount; } + /** + * How many Jobs should stored compiled? + * @return 7 Jobs for every Connection, and at least 10. + */ public int jobs_compiledtarget() { int w = 7 * Server.getServer().getConnectionCount(); return (w < 10) ? 10 : w;