Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 71c099a

Browse filesBrowse files
author
rpytel1
committed
Not really sure if it is working but no exceptions
1 parent aa89211 commit 71c099a
Copy full SHA for 71c099a

File tree

6 files changed

+170
-101
lines changed
Filter options

6 files changed

+170
-101
lines changed

‎Assignment1/src/client/Client.java

Copy file name to clipboardExpand all lines: Assignment1/src/client/Client.java
+59-49Lines changed: 59 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.rmi.registry.LocateRegistry;
88
import java.rmi.registry.Registry;
99
import java.util.ArrayList;
10+
import java.util.Arrays;
1011
import java.util.List;
1112
import java.util.concurrent.atomic.AtomicInteger;
1213
import java.util.stream.IntStream;
@@ -18,57 +19,66 @@
1819
import util.IRemoteEntity;
1920

2021
public class Client {
21-
static int msgNum[];
22-
static List <AtomicInteger> runs;
23-
public static void main(String[] args) throws NotBoundException, IOException, InterruptedException{
24-
Registry registry = LocateRegistry.getRegistry("localhost", Constant.RMI_PORT);
25-
BufferedReader br = new BufferedReader(new FileReader("tests/messages.txt"));
26-
String line = "";
27-
Message temp;
28-
runs = new ArrayList<AtomicInteger>(registry.list().length);
29-
msgNum = new int[registry.list().length];
30-
for (int i=0; i<msgNum.length; i++) msgNum[i] = 0;
31-
while ((line = br.readLine()) != null) {
32-
String[] split_line = line.split(" ");
33-
String msgText = split_line[1];
34-
VectorClock vt = new VectorClock(registry.list().length,Integer.parseInt(split_line[0]));
35-
int sender = Integer.parseInt(split_line[0]);
36-
System.out.println(sender);
37-
int receiver = Integer.parseInt(split_line[2]);
38-
temp = new Message(msgText,vt,new Buffer(), sender, receiver);
39-
runs.add(sender, new AtomicInteger(runs.get(sender).getAndIncrement()));
40-
msgNum[sender]++;
41-
((IRemoteEntity) registry.lookup(registry.list()[sender])).addMessageToBeSent(Integer.parseInt(split_line[3]), temp);
42-
}
43-
br.close();
44-
45-
SchiperEggliSandoz();
46-
}
47-
48-
public static void SchiperEggliSandoz() throws NotBoundException, InterruptedException, IOException{
49-
Registry registry = LocateRegistry.getRegistry("localhost", Constant.RMI_PORT);
50-
IRemoteEntity[] RMI_IDS = new IRemoteEntity[registry.list().length];
51-
for(int i=0; i<registry.list().length; i++){
52-
RMI_IDS[i] = (IRemoteEntity) registry.lookup(registry.list()[i]);
53-
RMI_IDS[i].setRuns(runs.get(i).get());
54-
}
22+
static int msgNum[];
23+
static List<AtomicInteger> runs;
5524

56-
for(int i=0; i<RMI_IDS.length; i++){
57-
IRemoteEntity RDi = RMI_IDS[i];
58-
for (int j=0; j<msgNum[i]; j++){
59-
new Thread ( () -> {
60-
try {
61-
Thread.sleep((int)(Math.random()*500));
62-
RDi.sendMessage();
63-
64-
} catch (Exception e) {
65-
e.printStackTrace();
66-
}
67-
}).start();
68-
}
69-
}
25+
public static void main(String[] args) throws NotBoundException, IOException, InterruptedException {
26+
Registry registry = LocateRegistry.getRegistry("localhost", Constant.RMI_PORT);
27+
BufferedReader br = new BufferedReader(new FileReader("tests/messages.txt"));
28+
String line = "";
29+
Message temp;
30+
runs = new ArrayList<>();
31+
32+
for(int i=0;i<registry.list().length;i++){
33+
runs.add(new AtomicInteger(0));
34+
}
35+
36+
msgNum = new int[registry.list().length];
37+
for (int i = 0; i < msgNum.length; i++) msgNum[i] = 0;
38+
while ((line = br.readLine()) != null) {
39+
String[] split_line = line.split(" ");
40+
String msgText = split_line[1];
41+
VectorClock vt = new VectorClock(registry.list().length, Integer.parseInt(split_line[0]));
42+
int sender = Integer.parseInt(split_line[0]);
43+
System.out.println(sender);
44+
int receiver = Integer.parseInt(split_line[2]);
45+
temp = new Message(msgText, vt, new Buffer(), sender, receiver);
46+
47+
if (runs.get(sender) != null) {
48+
runs.add(sender, new AtomicInteger(runs.get(sender).getAndIncrement()));
49+
}
50+
msgNum[sender]++;
51+
((IRemoteEntity) registry.lookup(registry.list()[sender])).addMessageToBeSent(Integer.parseInt(split_line[3]), temp);
52+
}
53+
br.close();
54+
55+
SchiperEggliSandoz();
56+
}
57+
58+
public static void SchiperEggliSandoz() throws NotBoundException, InterruptedException, IOException {
59+
Registry registry = LocateRegistry.getRegistry("localhost", Constant.RMI_PORT);
60+
IRemoteEntity[] RMI_IDS = new IRemoteEntity[registry.list().length];
61+
for (int i = 0; i < registry.list().length; i++) {
62+
RMI_IDS[i] = (IRemoteEntity) registry.lookup(registry.list()[i]);
63+
RMI_IDS[i].setRuns(runs.get(i).get());
64+
}
65+
66+
for (int i = 0; i < RMI_IDS.length; i++) {
67+
IRemoteEntity RDi = RMI_IDS[i];
68+
for (int j = 0; j < msgNum[i]; j++) {
69+
new Thread(() -> {
70+
try {
71+
Thread.sleep((int) (Math.random() * 500));
72+
RDi.sendMessage();
73+
74+
} catch (Exception e) {
75+
e.printStackTrace();
76+
}
77+
}).start();
78+
}
79+
}
7080
/*while(runs.stream().mapToInt(p->p.get()).sum()!=0){
7181
Thread.sleep(1);
7282
}*/
73-
}
83+
}
7484
}

‎Assignment1/src/clock/VectorClock.java

Copy file name to clipboardExpand all lines: Assignment1/src/clock/VectorClock.java
+23-7Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package clock;
22

3+
import java.io.Serializable;
34
import java.util.ArrayList;
45
import java.util.Collections;
56
import java.util.List;
67

7-
public class VectorClock {
8+
public class VectorClock implements Serializable {
89

910
List<Integer> timeVector;
1011
int processID;
12+
private static final long serialVersionUID = 1L;
1113

12-
public VectorClock(int n, int id) {
14+
public VectorClock() {
15+
16+
}
17+
18+
public VectorClock(int id, int n) {
1319
timeVector = new ArrayList<>(Collections.nCopies(n, 0));
1420
processID = id;
1521
}
@@ -19,12 +25,20 @@ public VectorClock(int id, List<Integer> vt) {
1925
processID = id;
2026
}
2127

22-
public List<Integer> getVector() {
28+
public List<Integer> getTimeVector() {
2329
return this.timeVector;
2430
}
2531

26-
public int getID() {
27-
return this.processID;
32+
public void setTimeVector(List<Integer> timeVector) {
33+
this.timeVector = timeVector;
34+
}
35+
36+
public int getProcessID() {
37+
return processID;
38+
}
39+
40+
public void setProcessID(int processID) {
41+
this.processID = processID;
2842
}
2943

3044
public int size() {
@@ -42,7 +56,7 @@ public List<Integer> merge(VectorClock vc2) {
4256

4357
for (int i = 0; i < this.timeVector.size(); i++) {
4458
Integer myTime = this.timeVector.get(i);
45-
Integer receivedTime = vc2.getVector().get(i);
59+
Integer receivedTime = vc2.getTimeVector().get(i);
4660

4761
if (myTime < receivedTime) {
4862
this.timeVector.add(i, receivedTime);
@@ -61,7 +75,7 @@ public boolean smallerOrEqualThan(VectorClock vc2) {
6175
boolean smallerOrEqual = true;
6276
for (int i = 0; i < this.timeVector.size(); i++) {
6377
Integer myTime = this.timeVector.get(i);
64-
Integer receivedTime = vc2.getVector().get(i);
78+
Integer receivedTime = vc2.getTimeVector().get(i);
6579

6680
if (myTime > receivedTime) {
6781
smallerOrEqual = false;
@@ -81,4 +95,6 @@ public String toString() {
8195
}
8296
return str;
8397
}
98+
99+
84100
}

‎Assignment1/src/message/Message.java

Copy file name to clipboardExpand all lines: Assignment1/src/message/Message.java
+58-28Lines changed: 58 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,69 @@
33
import clock.VectorClock;
44
import util.Buffer;
55

6-
public class Message {
6+
import java.io.Serializable;
7+
8+
public class Message implements Serializable {
79
String text;
810
VectorClock timestamp;
911
Buffer buffer;
1012
int receiverID;
1113
int senderID;
12-
13-
public Message(String m, VectorClock vt, Buffer S, int sID, int rID){
14-
this.text = m;
15-
this.timestamp = vt;
16-
this.buffer = S;
17-
this.receiverID = rID;
18-
this.senderID = sID;
19-
}
20-
21-
public String getText(){
22-
return this.text;
23-
}
24-
25-
public VectorClock getTimestamp(){
26-
return this.timestamp;
27-
}
28-
29-
public Buffer getBuffer(){
30-
return this.buffer;
31-
}
32-
33-
public int getReceiver(){
34-
return this.receiverID;
35-
}
36-
37-
public int getSender(){
38-
return this.senderID;
14+
private static final long serialVersionUID = 1L;
15+
16+
public Message() {
17+
18+
}
19+
20+
public Message(String m, VectorClock vt, Buffer S, int sID, int rID) {
21+
this.text = m;
22+
this.timestamp = vt;
23+
this.buffer = S;
24+
this.receiverID = rID;
25+
this.senderID = sID;
26+
}
27+
28+
public String getText() {
29+
return this.text;
30+
}
31+
32+
public VectorClock getTimestamp() {
33+
return this.timestamp;
34+
}
35+
36+
public Buffer getBuffer() {
37+
return this.buffer;
38+
}
39+
40+
public int getReceiverID() {
41+
return this.receiverID;
42+
}
43+
44+
public int getSenderID() {
45+
return this.senderID;
46+
}
47+
48+
public void setText(String text) {
49+
this.text = text;
50+
}
51+
52+
public void setTimestamp(VectorClock timestamp) {
53+
this.timestamp = timestamp;
54+
}
55+
56+
public void setBuffer(Buffer buffer) {
57+
this.buffer = buffer;
3958
}
4059

60+
61+
public void setReceiverID(int receiverID) {
62+
this.receiverID = receiverID;
63+
}
64+
65+
66+
public void setSenderID(int senderID) {
67+
this.senderID = senderID;
68+
}
69+
70+
4171
}

‎Assignment1/src/server/RemoteEntityImpl.java

Copy file name to clipboardExpand all lines: Assignment1/src/server/RemoteEntityImpl.java
+11-9Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,19 @@ protected RemoteEntityImpl() throws RemoteException {
3333
@Override
3434
public void receive(Message m) throws RemoteException{
3535
Buffer receivedBuffer = m.getBuffer();
36-
int receiver = m.getReceiver();
36+
int receiver = m.getReceiverID();
3737

3838
if (!receivedBuffer.contains(receiver) || (m.getBuffer().contains(receiver)
3939
&& receivedBuffer.get(receiver).smallerOrEqualThan(vt))) {
4040
deliver(m);
4141

4242
Message message = msgBuffer.peek();
43-
while (!message.getBuffer().contains(message.getReceiver()) || (message.getBuffer().contains(message.getReceiver())
44-
&& message.getBuffer().get(message.getReceiver()).smallerOrEqualThan(vt))) {
45-
deliver(msgBuffer.peek());
46-
message = msgBuffer.peek();
43+
if(message!=null) {
44+
while (!message.getBuffer().contains(message.getReceiverID()) || (message.getBuffer().contains(message.getReceiverID())
45+
&& message.getBuffer().get(message.getReceiverID()).smallerOrEqualThan(vt))) {
46+
deliver(msgBuffer.peek());
47+
message = msgBuffer.peek();
48+
}
4749
}
4850
} else {
4951
msgBuffer.add(m);
@@ -55,16 +57,16 @@ public void sendMessage() throws RemoteException{
5557
if (this.toBeSent.get(0)!= null){
5658
Message m = this.toBeSent.get(0);
5759
this.vt.incTimeVector(id);
58-
RD[m.getReceiver()].receive(m);
59-
S.put(m.getReceiver(), vt);
60+
RD[m.getReceiverID()].receive(m);
61+
S.put(m.getReceiverID(), vt);
6062
this.toBeSent.remove(0);
6163
}
6264
}
6365

6466
@Override
6567
public void deliver(Message m) throws RemoteException{
66-
System.out.println("Message " + m.getText() + "has been delivered to " + m.getReceiver());
67-
this.vt.incTimeVector(m.getSender());
68+
System.out.println("Message " + m.getText() + "has been delivered to " + m.getReceiverID());
69+
this.vt.incTimeVector(m.getSenderID());
6870
msgBuffer.poll();
6971
this.runs.decrementAndGet();
7072

‎Assignment1/src/util/Buffer.java

Copy file name to clipboard
+18-7Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
11
package util;
22

3+
import java.io.Serializable;
34
import java.util.HashMap;
45

56
import clock.VectorClock;
67
import message.Message;
78

8-
public class Buffer {
9+
public class Buffer implements Serializable{
910
public HashMap<Integer,VectorClock> messageBuffer;
10-
11-
public Buffer(){
11+
private static final long serialVersionUID = 1L;
12+
13+
14+
public Buffer(){
1215
messageBuffer = new HashMap<Integer,VectorClock>();
1316
}
14-
17+
1518
public VectorClock get(int i){
1619
return messageBuffer.get(i);
1720
}
18-
21+
1922
public VectorClock remove(int i){
2023
return messageBuffer.remove(i);
2124
}
22-
25+
2326
public boolean contains(int i){
2427
return messageBuffer.containsKey(i);
2528
}
26-
29+
2730
public void put(int i , VectorClock vt){
2831
if(messageBuffer.containsKey(i)){
2932
messageBuffer.put(i, new VectorClock(i,messageBuffer.get(i).merge(vt)));
@@ -32,4 +35,12 @@ public void put(int i , VectorClock vt){
3235
messageBuffer.put(i, vt);
3336
}
3437
}
38+
39+
public HashMap<Integer, VectorClock> getMessageBuffer() {
40+
return messageBuffer;
41+
}
42+
43+
public void setMessageBuffer(HashMap<Integer, VectorClock> messageBuffer) {
44+
this.messageBuffer = messageBuffer;
45+
}
3546
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.