package client;
import java.awt.Graphics;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import javax.swing.JPanel;
import java.awt.*;
import java.io.EOFException;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
public class Server {
final int LEN = 10000000; //proměná která se zadává do polí jako největší číslo, můžeš pak měnit pouze toto číslo a mění se ti to všude ;-)
int[] sample = new int[LEN]; //pole vzorků -> vydělením vzorkovací frekvencí vznikne čas
float[] seconds = new float[LEN]; //pole sekund v ms -> nepoužívá se zde(server)
short[] channel1 = new short[LEN]; //první kanál, prvních dat -> pomocí citlivosti vydělím kanál1 a vzniknou data kanálu 3
short[] channel2 = new short[LEN]; // druhý kanál, prvních dat -> pomocí citlivosti vydělím kanál1 a vzniknou data kanálu 4
//float[] channel3 = new float[LEN];
//float[] channel4 = new float[LEN];
byte dataType = 0x01;
int lastSample = 0; //číslo posledního vzorku, určuje i počet vzorků
int[] averages = new int[LEN];
public Server() {
try {
DataInputStream input = null;
DataOutputStream output = null;
Socket client = new Socket("localhost", 1234);
input = new DataInputStream(client.getInputStream());
output = new DataOutputStream(client.getOutputStream());
output.writeByte(dataType);
int counter = 0;
switch (dataType) {
case 0x01:
counter = 0;
while (counter < sample.length) {//načtení dat ze serveru
sample[counter] = Integer.reverseBytes(input.readInt());//číslo vzorku
channel1[counter] = Short.reverseBytes(input.readShort());
channel2[counter] = Short.reverseBytes(input.readShort());
lastSample = counter;//uložení čísla posledního vzorku, poslední cyklus
// System.out.println(sample[counter] + " " + channel1[counter] + " " + channel2[counter]);
counter++;
}
break;
}
} catch (EOFException ex) {//HODNĚ DŮLEŽITÉ, po skončení načítání vystokočí tato hláška a uzavře se spojení se serverem
} catch (UnknownHostException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println(lastSample);
}
public static void main(String[] args) {
try {
// TODO code application logic here
//Client client = new Client();
ServerSocket socket = new ServerSocket(1234);//spuštění serveru
Server_listener s = new Server_listener(socket);
s.run();
} catch (IOException ex) {
Logger.getLogger(Server.class
.getName()).log(Level.SEVERE, null, ex);
}
}
private static class Server_listener implements Runnable {
Server client = new Server();//spuštění třídy Server, načtení atd...
DataInputStream input = null;
DataOutputStream output = null;
ServerSocket server;
public Server_listener(ServerSocket server) {
this.server = server;
//this.channel
}
@Override
public void run() {
while (true) {//cyklus serveru, musí být na začátku a true, aby mohl obsluhovat více klientů
try {
Socket socket;
byte command = 0;
int counter = 0;
socket = server.accept();
System.err.println("Socket accepted");
DataInputStream input = new DataInputStream(socket.getInputStream());
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
command = input.readByte();
switch (command) {
case 0x01:
counter = 0;
while (counter < client.LEN) {//posílá data klienta dalšímu klientovi 0x01
output.writeInt(Integer.reverseBytes(client.sample[counter]));
output.writeShort(Short.reverseBytes(client.channel1[counter]));
output.writeShort(Short.reverseBytes(client.channel2[counter]));
counter++;
}
break;
case 0x02:
counter = 0;
while (counter < client.LEN) {
output.writeInt(Integer.reverseBytes(Float.floatToIntBits((float) client.sample[counter] / 250.0F)));//převedení vzorků na milisekundy, vydělením vzorku vzorkovací frekvencí
output.writeInt(Integer.reverseBytes(Float.floatToIntBits((float) client.channel1[counter] / 400.0F)));//převedení prvního kanálu na mV, vydělením citlivostí- citlivost = channel1/channel3
//output.writeInt(Integer.reverseBytes(Float.floatToIntBits((float) client.channel2[counter] / 400.0F)));//převedení prvního kanálu na mV, vydělením citlivostí- citlivost = channel1/channel3
output.writeFloat((float) client.channel2[counter] / 400.0F);
counter++;
}
break;
}
socket.close();//uzavření spojení
System.err.println("Socket closed");
} catch (java.net.SocketException e) {//důležité
} catch (IOException ex) {
Logger.getLogger(Server.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}