Добавлен первый модуль второго семестра (второй вариант)
This commit is contained in:
parent
a33683c490
commit
f1224c7cca
51
src/module2/variant2/Circle.java
Normal file
51
src/module2/variant2/Circle.java
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package module2.variant2;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import static module2.variant2.Constants.HEIGHT;
|
||||||
|
import static module2.variant2.Constants.WIDTH;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public final class Circle {
|
||||||
|
|
||||||
|
private int x, y;
|
||||||
|
private int radius;
|
||||||
|
private int color;
|
||||||
|
|
||||||
|
public void draw(Graphics2D g) {
|
||||||
|
g.setColor(new Color(color));
|
||||||
|
g.fillOval(x, y, radius, radius);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void writeData(DataOutputStream dos) throws IOException {
|
||||||
|
dos.writeInt(x);
|
||||||
|
dos.writeInt(y);
|
||||||
|
dos.writeInt(radius);
|
||||||
|
dos.writeInt(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void readData(DataInputStream dis) throws IOException {
|
||||||
|
x = dis.readInt();
|
||||||
|
y = dis.readInt();
|
||||||
|
radius = dis.readInt();
|
||||||
|
color = dis.readInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void generate() {
|
||||||
|
radius = Util.rand(20, 100);
|
||||||
|
x = Util.rand(WIDTH - radius);
|
||||||
|
y = Util.rand(HEIGHT - radius);
|
||||||
|
color = Util.randomColor(0, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return x + ":" + y + " " + radius;
|
||||||
|
}
|
||||||
|
}
|
68
src/module2/variant2/ClientForm.java
Normal file
68
src/module2/variant2/ClientForm.java
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package module2.variant2;
|
||||||
|
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JOptionPane;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import static module2.variant2.Constants.CIRCLES_COUNT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public final class ClientForm extends JFrame {
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
final String ip = JOptionPane.showInputDialog(null, "Введите IP", "127.0.0.1");
|
||||||
|
ClientForm form = new ClientForm(ip);
|
||||||
|
form.setVisible(true);
|
||||||
|
form.setClient();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final String ip;
|
||||||
|
private SocketClient client;
|
||||||
|
private final Circle[] circles;
|
||||||
|
|
||||||
|
public ClientForm(String ip) {
|
||||||
|
super();
|
||||||
|
this.ip = ip;
|
||||||
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
|
Panel panel = new Panel();
|
||||||
|
panel.setPreferredSize(new Dimension(Constants.WIDTH, Constants.HEIGHT));
|
||||||
|
add(panel);
|
||||||
|
pack();
|
||||||
|
circles = new Circle[CIRCLES_COUNT];
|
||||||
|
for (int i = 0; i < CIRCLES_COUNT; i++) {
|
||||||
|
circles[i] = new Circle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClient() throws IOException {
|
||||||
|
client = new SocketClient(ip, this);
|
||||||
|
client.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized Circle getCircle(int index) {
|
||||||
|
return circles[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
private class Panel extends JPanel {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void paintComponent(Graphics g) {
|
||||||
|
super.paintComponent(g);
|
||||||
|
final Graphics2D g2d = (Graphics2D) g.create();
|
||||||
|
synchronized (circles) {
|
||||||
|
if (circles == null) return;
|
||||||
|
for (Circle circle : circles) {
|
||||||
|
if (circle != null) {
|
||||||
|
circle.draw(g2d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
src/module2/variant2/Constants.java
Normal file
12
src/module2/variant2/Constants.java
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package module2.variant2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public final class Constants {
|
||||||
|
|
||||||
|
public static final int WIDTH = 640, HEIGHT = 480;
|
||||||
|
public static final int PORT = 7281;
|
||||||
|
public static final int CIRCLES_COUNT = 10;
|
||||||
|
}
|
40
src/module2/variant2/SocketClient.java
Normal file
40
src/module2/variant2/SocketClient.java
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
package module2.variant2;
|
||||||
|
|
||||||
|
import java.io.DataInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.Socket;
|
||||||
|
import static module2.variant2.Constants.PORT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public final class SocketClient extends Thread {
|
||||||
|
|
||||||
|
private final Socket socket;
|
||||||
|
private final DataInputStream dis;
|
||||||
|
private final ClientForm form;
|
||||||
|
|
||||||
|
public SocketClient(String host, ClientForm form) throws IOException {
|
||||||
|
this.form = form;
|
||||||
|
socket = new Socket(host, PORT);
|
||||||
|
dis = new DataInputStream(socket.getInputStream());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
final int size = dis.readInt();
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
Circle circle = form.getCircle(i);
|
||||||
|
circle.readData(dis);
|
||||||
|
}
|
||||||
|
form.repaint();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
91
src/module2/variant2/SocketServer.java
Normal file
91
src/module2/variant2/SocketServer.java
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
package module2.variant2;
|
||||||
|
|
||||||
|
import java.io.DataOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
import java.net.ServerSocket;
|
||||||
|
import java.net.Socket;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.util.Timer;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
import static module2.variant2.Constants.CIRCLES_COUNT;
|
||||||
|
import static module2.variant2.Constants.PORT;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public final class SocketServer extends Thread {
|
||||||
|
|
||||||
|
private static final int GENERATE_DELAY = 2000;
|
||||||
|
|
||||||
|
public static void main(String[] args) throws IOException {
|
||||||
|
new SocketServer().start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private final Circle[] circles;
|
||||||
|
private final ServerSocket serverSocket;
|
||||||
|
private final Timer timer;
|
||||||
|
|
||||||
|
public SocketServer() throws IOException {
|
||||||
|
serverSocket = new ServerSocket(PORT);
|
||||||
|
circles = new Circle[CIRCLES_COUNT];
|
||||||
|
for (int i = 0; i < CIRCLES_COUNT; i++) {
|
||||||
|
circles[i] = new Circle();
|
||||||
|
circles[i].generate();
|
||||||
|
}
|
||||||
|
System.out.println(getInetAddress());
|
||||||
|
timer = new Timer();
|
||||||
|
timer.scheduleAtFixedRate(new TimerTask() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
synchronized (circles) {
|
||||||
|
for (Circle circle : circles) {
|
||||||
|
circle.generate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, GENERATE_DELAY, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getInetAddress() throws UnknownHostException {
|
||||||
|
return InetAddress.getLocalHost().getHostAddress();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
final Socket socket = serverSocket.accept();
|
||||||
|
new WorkingThread(socket).start();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
ex.printStackTrace();// break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class WorkingThread extends Thread {
|
||||||
|
|
||||||
|
private final DataOutputStream dos;
|
||||||
|
|
||||||
|
public WorkingThread(Socket socket) throws IOException {
|
||||||
|
this.dos = new DataOutputStream(socket.getOutputStream());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
while (true) {
|
||||||
|
try {
|
||||||
|
dos.writeInt(circles.length);
|
||||||
|
for (Circle circle : circles) {
|
||||||
|
circle.writeData(dos);
|
||||||
|
}
|
||||||
|
// try {
|
||||||
|
// Thread.sleep(GENERATE_DELAY);
|
||||||
|
// } catch (InterruptedException ex) { }
|
||||||
|
} catch (IOException ex) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
46
src/module2/variant2/Util.java
Normal file
46
src/module2/variant2/Util.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package module2.variant2;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author aNNiMON
|
||||||
|
*/
|
||||||
|
public final class Util {
|
||||||
|
|
||||||
|
private static final Random random = new Random();
|
||||||
|
|
||||||
|
public static int rand(int to) {
|
||||||
|
return random.nextInt(to);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int rand(int from, int to) {
|
||||||
|
return random.nextInt(to - from + 1) + from;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int randomColor(int from, int to) {
|
||||||
|
if (from < 0) {
|
||||||
|
from = 0;
|
||||||
|
} else if (from > 255) {
|
||||||
|
from = 255;
|
||||||
|
}
|
||||||
|
if (to < 0) {
|
||||||
|
to = 0;
|
||||||
|
} else if (to > 255) {
|
||||||
|
to = 255;
|
||||||
|
}
|
||||||
|
if (from == to) {
|
||||||
|
return (0xFF000000 | (from << 16) | (from << 8) | from);
|
||||||
|
} else if (from > to) {
|
||||||
|
final int temp = to;
|
||||||
|
to = from;
|
||||||
|
from = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
final int red = rand(from, to);
|
||||||
|
final int green = rand(from, to);
|
||||||
|
final int blue = rand(from, to);
|
||||||
|
|
||||||
|
return (0xFF000000 | (red << 16) | (green << 8) | blue);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user