Commit 03f21007 authored by Teemu's avatar Teemu
Browse files

Luotu Answer- ja Runko-luokat. Runko on ohjelman pääosa ja käyttää Answeria Y:lle kommunikointiin

parent 1e32010c
import java.net.*;
import java.io.*;
class Answer implements Runnable {
int request;
int t;
int[] sums;
int[] amounts;
ObjectOutputStream out;
public void Answer(int request_, int t_, int[] sums_, int[] amounts_, ObjectOutputStream out_) {
request = request_;
t = t_;
sums = sums_;
amounts = amounts_;
out = out_;
}
@Override
public void run() {
// Vastataan asianomaisesti Y:n tiedusteluun
if(request == 1) { // Tutkitaan palvelimen pyyntö. Jos 1:
int fsum = 0; // Määritellään final sum, eli lopullinen summa johon halutaan sums[]-taulukon alkioiden summa
for (int i = 0;i<t;i++) { //
fsum += sums[i]; // Lisätään jokaisen summainpalvelimen sums[]-alkio fsumiin niin lopputulos on kaikkien summa
} //
try { //
out.writeInt(fsum); // Lähetetään tulos Y:lle
out.flush(); // Puhdistetaan kirjoitusvirta.
} catch (IOException e) { // Ei käsitellä mahdollista virhettä
} //
} else if(request == 2) { // Jos pyyntö 2:
int fsummain = 0; // Oletetaan summaimen 0 sums[]-alkio suurimmaksi
for(int i=1;i<t;i++) { // tutkitaan jokaisen muun summaimen sums[]-alkio
if(sums[i] > sums[fsummain])// Jos havaitaan suurempi sums[]-alkio
fsummain=i; // Tallennetaan fsummain-muuttujaan kyseisen alkion numerotunnus
} //
try { //
out.writeInt(fsummain); // Lähetetään tulos Y:lle
out.flush(); // Puhdistetaan kirjoitusvirta.
} catch (IOException e) { // Ei käsitellä mahdollista virhettä
} //
} else if(request == 3) { // Jos pyyntö 3:
int famount = 0; // Määritellään final amount kuten pyynnöllä 1 final sum
for(int i = 0;i<t;i++) { //
famount += amounts[i]; // Lisätään vastaavasti famountin arvoa jokaisen summaimen saamien lukujen määrällä
} //
try { //
out.writeInt(famount); // Lähetetään tulos Y:lle
out.flush(); // Puhdistetaan kirjoitusvirta.
} catch (IOException e) { // Ei käsitellä mahdollista virhettä
} //
} else {
if(request != 0) { // Jos pyyntö ei ollut 1,2,3 tai 0 (pääohjelma hoitaa 0:n tapauksen)
try{ //
out.writeInt(-1); // Lähetetään Y:lle virhekoodi -1
out.flush(); // Puhdistetaan kirjoitusvirta
} catch (IOException e) { // Ei käsitellä mahdollista virhettä
} //
}
}
}
}
import java.net.*;
import java.io.*;
class Runko{
public void Runko(int t, ObjectInputStream input, ObjectOutputStream output) {
// Create appropriate amounts of sums and amount variables
int [] sums = new int[t];
int [] amounts = new int[t];
for(int i =0;i<t;i++) { //Set all above to zero
sums[i] = 0;
amounts[i] = 0;
}
Summain[] f = new Summain[t]; // Luodaan t kappaletta Summainten viittauksia
ServerSocket[] s = new ServerSocket[t];
for(int i = 0;i<t;i++) { //
f[i] = new Summain(); // Määritetään jokaiselle Summainviittaukselle Summain
try { //
s[i] = new ServerSocket(0); // Luodaan uusi ServerSocket seuraavaan vapaaseen porttiin
f[i].Summain(i,sums,amounts,s[i]); // Alustetaan edellämainittu Summain
}catch (IOException e) { // Otetaan kiinni IOException ServerSocketin luomisesta.
} //
new Thread(f[i]).start(); // Käynnistetään Summain
}
for(int i = 0;i<t;i++) {
try{
output.writeInt(s[i].getLocalPort()); // Ilmoitetaan jokaisen Summaimen paikallinen portti Y:lle
output.flush();
} catch (IOException e) {
}
}
int previous = 0; // Käytetään integeriä previous Y:n lähettämän kysymyksen säilömiseen
do { //
try{ //
previous = input.readInt(); // Luetaan previoukselle arvo inputista
Answer a = new Answer(); // Luodaan uusi vastaajaluokka
a.Answer(previous, t, sums, amounts, output); // Määritellään a:lle tarvitut arvot
new Thread(a).start(); // Käynnistetään a
}catch (IOException e) { //
} //
} while (previous != 0); // Tutkitaan oliko Y:n lähettämä viesti 0
for(int i = 0;i<t;i++) {
try{
s[i].close(); // Suljetaan kaikki avoimet Summainsocketit
} catch (IOException e) {
}
}
try{
input.close(); // Suljetaan input ja output
output.close();
} catch (IOException e){
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment