From 8a3174168adfe655ece8f78d1afb07b8c1c8dec5 Mon Sep 17 00:00:00 2001
From: KonakovAlexei <46484735+KonakovAlexei@users.noreply.github.com>
Date: Wed, 23 Jan 2019 21:38:41 +0300
Subject: [PATCH] Add files via upload
---
homework7/homework7.iml | 11 +++
.../out/production/homework7/hw7/Runner.class | Bin 0 -> 1558 bytes
.../homework7/hw7/client/Client.class | Bin 0 -> 1186 bytes
.../homework7/hw7/client/FXMLDocument.fxml | 23 +++++
.../hw7/client/FXMLDocumentController.class | Bin 0 -> 3245 bytes
.../homework7/hw7/server/ClientHandler.class | Bin 0 -> 4160 bytes
.../homework7/hw7/server/MyServer.class | Bin 0 -> 2667 bytes
homework7/src/hw7/Runner.java | 17 ++++
homework7/src/hw7/client/Client.java | 24 +++++
homework7/src/hw7/client/FXMLDocument.fxml | 23 +++++
.../hw7/client/FXMLDocumentController.java | 67 ++++++++++++++
homework7/src/hw7/server/ClientHandler.java | 86 ++++++++++++++++++
homework7/src/hw7/server/MyServer.java | 53 +++++++++++
13 files changed, 304 insertions(+)
create mode 100644 homework7/homework7.iml
create mode 100644 homework7/out/production/homework7/hw7/Runner.class
create mode 100644 homework7/out/production/homework7/hw7/client/Client.class
create mode 100644 homework7/out/production/homework7/hw7/client/FXMLDocument.fxml
create mode 100644 homework7/out/production/homework7/hw7/client/FXMLDocumentController.class
create mode 100644 homework7/out/production/homework7/hw7/server/ClientHandler.class
create mode 100644 homework7/out/production/homework7/hw7/server/MyServer.class
create mode 100644 homework7/src/hw7/Runner.java
create mode 100644 homework7/src/hw7/client/Client.java
create mode 100644 homework7/src/hw7/client/FXMLDocument.fxml
create mode 100644 homework7/src/hw7/client/FXMLDocumentController.java
create mode 100644 homework7/src/hw7/server/ClientHandler.java
create mode 100644 homework7/src/hw7/server/MyServer.java
diff --git a/homework7/homework7.iml b/homework7/homework7.iml
new file mode 100644
index 0000000..9465dd8
--- /dev/null
+++ b/homework7/homework7.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework7/out/production/homework7/hw7/Runner.class b/homework7/out/production/homework7/hw7/Runner.class
new file mode 100644
index 0000000000000000000000000000000000000000..214dc042b22b1dd7d4de8405e657e2b9b9e9a1b2
GIT binary patch
literal 1558
zcma)6ZBx@g5Pq%{A|cq)B8o4F2-<=W@m-53R1mQELK)QY(~%xD5|T`MMfer|3_trt
z7?|+~IQ|fSh2vftr$IZ8>E!Nq_jdPrcDMQV^YANx+bHYk!LWvr42h#U5*SmtOFsb2&j+?lp;kJ&G%K46ly9^yuwrk62hPGUOjUid|DuN+ZvR(1K
zzP&DjRle?!CR6e(?yT{^R&u0F%Bo#sFiO=Acg>Z$>x!U2F}AtwGW6x%mEQ9mZaUoE
zG|Muu-OYl^kr2BKgE8BpD@730eJLt)yO!{!?YSxr4>l=!wnZ3*?y}_8)-v}aDBTX<
zUa#~Z-zgI@OPfhFc`MW(BPbwa^2kU^Fq-GsVY4Fs={YS!~)O$OXw7P9J9
zYN-y~OCw9$eFG0rP_9!39wKXC8jlzTnn7A|GVnO`o>AVj3_YrBmSYQ7n#FL_P&Dua
zbHrNNY9iPXfw{a_4iChlS?FVsU#!0umeetir#jMDpmqlJum|~AofT`Q~zXG^woe{LZw+`$hT~AtJqO>Hg-+!`;KjK)n#+0d8S!(
zc-^(C3|HgmiVm;U3N3~pzoucyz%#rsa7p!G5N8>Nnmw@H9dApRrEoH+hkS!u(hK%z
z0JfWwhF6rjO?=zl14dyL>t`)CXSGJdq@KIk^F-8UUVGb
z#3!66jeUWxjH8F>`fdG8-YLp*hGMma*#@9dlob7XNbV&|hO%UFfuwQ5piuNtrhWo{
z4(CHW6J#AA{Y82;B;IJ~Or~`;R1vsIa!|~)j4^tE?mxMmigD8#vB;eUGjhKaG9$i6
xIQe!Tsn;q13*k13lOpg#q)Xs3p3|gCYV=9R)DY4ogDJ?Hcr=(`vq9>aWnt`
literal 0
HcmV?d00001
diff --git a/homework7/out/production/homework7/hw7/client/Client.class b/homework7/out/production/homework7/hw7/client/Client.class
new file mode 100644
index 0000000000000000000000000000000000000000..48c71758ebc0cec5b94360d4d80ea158425aa711
GIT binary patch
literal 1186
zcmZuwT~pIQ6g?>|DIr=~pr8Vl51~*bDk3U~VgWxUs6!ETd|JZNE|Vrqk_vyzm%`|b
z&c
z#q2%i3At|tlR-`R3i{33$+BVDf;)jx4yP3bDL-IdpkSzI9r6Nb^2M(qz_6K9rDC3N
zs$sPx^Quzp6~{zYaT}h+w}kAqH|k+Q%GS|`tcoW(o`Q;Iw?1#18?M!;lZb`G)4Hu<
zRmU@|sd%pA1=gv;MZ0Z!$-s_iMV?9SmnzCSHn2$=$~6{z63&5pqGJoMbi77Z#~T!=
z?tcy|7;7=I<6~P`Ogdq#$Lp4m$cIa>6!b}06n(#c#4WNoUFAX9X1=tiINN4l7^Jo{
zF{YK*OOPGzhps7@i0-)4^N7dcf$?$2B$9kfuXN3jKAJ8&;2zzaO^cZ10?{rcQc5Jl
z@oQ?cH@x6WhvR2Pt@%6%&F*-JAv6q!NSU-N0(tj?S9KykhF^0}=)2gg;aD|{(;v#v
z7X-RMmLf}Ij&=sk3eBmxGbrC_kw8C<-C;0?0b1)(0tS(%9m&ElWl3-YNumR0=9)<4
zx|&FyBlR2I+ohjSzs#Q@-9%3*r!~=AYC@0c^GFdaPdaX51h+6j<1|LYa)pSpRgTDU
zgR-RNA<7(~(xZe;Qe+H0xQzm>q?kpTqfX9oEiR=I0GK4eR7W@CR8)2|Nn-+2{{SXV
B4zvIO
literal 0
HcmV?d00001
diff --git a/homework7/out/production/homework7/hw7/client/FXMLDocument.fxml b/homework7/out/production/homework7/hw7/client/FXMLDocument.fxml
new file mode 100644
index 0000000..f2afaa7
--- /dev/null
+++ b/homework7/out/production/homework7/hw7/client/FXMLDocument.fxml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework7/out/production/homework7/hw7/client/FXMLDocumentController.class b/homework7/out/production/homework7/hw7/client/FXMLDocumentController.class
new file mode 100644
index 0000000000000000000000000000000000000000..9eed19081b15d502fd8e89d5392fefb130d64a6e
GIT binary patch
literal 3245
zcmcInSyvQC6#jZxdT1M2TmTJ-h{~ciS&czW5J5<0Bnsjdqs>r4OHcRM(}QUC#q9fP
z_T|Obcus_K^ql;F9REpvK;B}$>h8fFQR7Prki%(dWlBm6nx*Mt>!@T
z^qi5;2uBzh*YQ2qHo{}tYdTnPd@C!)t-Lj1i$2G3ebcvGC$FHssC#-YYa4?{(kUt=
z$Hbi9M{g9YE1s9yE(%b%N+1F%dNLYZFlfoB
zuayi~8qIBz#X1c1=-7&FDtsLU%<9;PO*+nDPRDt9b^$cFBA|R}9Cf^a7n$bUs)6jW
zWtykmJS`e{NymD$DQGB~xUD#Jyo^_*;Hx?|pj|;@TrgfEI$p!;Qt}N2wSiEOm9c5E
znnbPL(s$gYDXULsWo+i(EmM;#C4YCv>KE?%Pom6COVUp*%C(af`-XCPyk;~OI9guv?
zGczPnYe(ntk{ihX;Ap@WvPwzT)pxjISYEN5wqo6oR495Y302Z28zURH9Y`xRv=V0n
zi4rptKcO#8x9pUhbdGEI44-T4@?WsRy#ib9j*k0iJ@N3e^*S=2yr&_Kd2v68Yu-0K
zW~L^`o>3A?RnnC?(eNd{VvQ>r?PSdv!A_Sk{lk_&%_pimJ`=GienZrN;?6Agq~^P_
zCG7f|nai$lB(UeNIyamOQjVPOuLvhU^FL&c~w#(5bdT8ZM=`J9N0
z-~VBF<-K*|QH?D3o3=g53Sy?)mjow_e3-PsVt6k7|EQyk$ICJ7J-zorpyC$=8<&8%
zQ%0iB6Tb6GVjN|T4ZVe5XY2~7M1rd}eoiH1_YP*hK!SNQIw;f0=St39!5+Kql0CkC
zZrdy8nlC1f4^qqEtZ=UAT7YsTF!K;cX%zgPdzhmh3g8ibIZ9U^!*-5R`8UqxoIARH
zM`9jjY0l+a=4mWgSB8^%8CCnY&ZFw^6yx_D0;D)2aVP?I-C-pHpX&>Pro#ZK&^N4t5x8i|`UQl_Fs#gi(Yf}$c>
zQ4%l(eb_@yiR1=tOC;&8>(GwYFRSa>u>k!ls<~c%lsKyAQL}*BtEl5neYCS;0V}Vf
z{5n=0?YhQ0v4DnoG+sth;%$;}fxT=5MYx+##hsmmx{Gjj6GVzm9HY!BN}a$EPIAXw
zggiv2ijdQbkkja=hP0i=00tw-RY?4eeMDJan~=RHLUxhI35vE5MBO~Uk~y#KzJ>>Y
zc{E?X`B$oY(bYyYF1osg8~_e*J<6~6F`kU02}jUOcV$LenTI5*gP8N35IHKHYKa_`
qc~E&b|1wDYLtG{>jPE#WbnYAcgm0;MitBown3S17hQBjBo%t6vluKLy
literal 0
HcmV?d00001
diff --git a/homework7/out/production/homework7/hw7/server/ClientHandler.class b/homework7/out/production/homework7/hw7/server/ClientHandler.class
new file mode 100644
index 0000000000000000000000000000000000000000..d370af2905f9ed2ff8694dda74f9418b89731ce0
GIT binary patch
literal 4160
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
literal 0
HcmV?d00001
diff --git a/homework7/out/production/homework7/hw7/server/MyServer.class b/homework7/out/production/homework7/hw7/server/MyServer.class
new file mode 100644
index 0000000000000000000000000000000000000000..4edfbf59be2631c541ef989e67f30d1298c2bd9b
GIT binary patch
literal 2667
zcmai0Yf}?f7=BI?vJe(f6cF(eTCCw_@UB2Xq*|!~Z9}0*tzD8MtR%Z}cf+MOd+%Rp
ze}SLvv@q3~PCs@!{TJea>zILC{WS&z|$1_wu~&^PaQ$0yvBBVrav#
zhD$MoFrwjd3=s_1;2=h8@CL3_<7y0V;+onX)9_XdwYVPRc1pu|4E2~$1~=4jQw?v|
z;sV}LLt3d$s^Q%jrZC;ec(aWVnALDw!v_LdCTB{^a|Iex_lzYYS@g_Ya!O`A+Zhn3
zNt^SQ;T0VzaAJqTU}|CceA1Q9l5~=zzN2e~mCZ?KV2H-iLDMq5A%SqBb4nmGYG>)D
zA!S-}qL`nP&ZIGyqogrqXN=sG;h1V&5=LD+vnV}*y+K$@ddajeqUTU1Cvfn^(FJN1
zsyk&LEfqd|v|FC!ia=AaZQ9AP8&_5`vf!Dv#V`?X!DMBcDg%wLrhO0Gu1kAHW^vpo
zlpx29Z1zr2Pl3aUN~`U~QPqf+73&MmA%(-ncu@;E4cS&amc_Y0ojO
z`2l4g&a2%LX_cEA?vS@-(=ABH_b~DjBs+cYl=$4;b?iLr?%4vdv|V&E@~Wx0t1H*z
zgz6q0akLY&-$_1W71dUo9}4VwzRh$T!eI?Gog!$>n%Zs&)-o
z9TI1C+y!$#@S^5ZffjW1;iSMmKiYO?b(m<^aSw|+a%#xK(qW^Z<31c6t_tCys9{OR
zG8T#XvTb{==NN@?=`GkFqlwl9-&{WtOe5ZcLPdY}1)Q8#b&-G`Jwh7Q_VpxWF_v$>4Izhuhk
zGY@USa3|ynf%2-Lam4Z$`^)+j6;#@;w6cC{*Ud{WI9d}%o{+X1lupa`y80)G@Z|lX
zk#l4C6rZt+XQ$(;!~5gnc3cRwM`#&Roy%Z^;Y09LHUb%uW%nBnI*9
zAcTeos&~E;=_u5R*@PS
zNF^UZn+BJ$+YuO+cn#VsxJW8sZZn)*Ey!KeXDjr}R9A>fE=G-9E=|%0G<+*?Y)5{(
zVG}s=ay_*3d)LO#7cU`oU+{f|s}PQ&igR8&9ABa2FMa?cd=Gc6Lp(ufW^docb%ax0
zPY{_|N7c`W{s^tHdJQ$*Ylw|MLG4Ue&pPypuHH4&J>2*^MR~&`x{Kf+Q;x3p`P?t3Hob57drU}
zYDdtG9?l3Ey^I1R`5Z!MgCRm14r(;T2GbQ>sG*+PyxcgdgfDZO3W#<6geal!nSR7o
z$j7YyF@Q*Fh(O_K4m3+~XoFKo(2v0B7y8?~!(SKub^njQGyGo@;CsNBijWS4Zw-y(
zJ-=X|zz=BRWWT^~sGaB~?xu$u|0v`^wHtk#KGyRT$vw?%&iE1I+;3wY74EQ~TTnBV
zV!-c1+Vx*$x*S
J*)4y3|3Aibc_RP-
literal 0
HcmV?d00001
diff --git a/homework7/src/hw7/Runner.java b/homework7/src/hw7/Runner.java
new file mode 100644
index 0000000..e843bb3
--- /dev/null
+++ b/homework7/src/hw7/Runner.java
@@ -0,0 +1,17 @@
+package hw7;
+
+import hw7.client.Client;
+import hw7.server.MyServer;
+import javafx.application.Application;
+
+public class Runner {
+ public static void main(String[] args) {
+ new Thread(() -> new MyServer()).start();
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException ex) {
+ ex.printStackTrace();
+ }
+ new Thread(() -> Application.launch(Client.class, args)).start();
+ }
+}
\ No newline at end of file
diff --git a/homework7/src/hw7/client/Client.java b/homework7/src/hw7/client/Client.java
new file mode 100644
index 0000000..590116e
--- /dev/null
+++ b/homework7/src/hw7/client/Client.java
@@ -0,0 +1,24 @@
+package hw7.client;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+
+public class Client extends Application {
+
+ @Override
+ public void start(Stage stage) throws Exception {
+ Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
+
+ stage.setScene(new Scene(root));
+ stage.setTitle("ChatWindow");
+ stage.show();
+ }
+
+ public static void main(String[] args) {
+ launch(args);
+ }
+
+}
\ No newline at end of file
diff --git a/homework7/src/hw7/client/FXMLDocument.fxml b/homework7/src/hw7/client/FXMLDocument.fxml
new file mode 100644
index 0000000..f2afaa7
--- /dev/null
+++ b/homework7/src/hw7/client/FXMLDocument.fxml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/homework7/src/hw7/client/FXMLDocumentController.java b/homework7/src/hw7/client/FXMLDocumentController.java
new file mode 100644
index 0000000..74ef2ce
--- /dev/null
+++ b/homework7/src/hw7/client/FXMLDocumentController.java
@@ -0,0 +1,67 @@
+package hw7.client;
+
+import java.net.URL;
+import java.util.ResourceBundle;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.fxml.Initializable;
+import javafx.scene.control.Button;
+import javafx.scene.control.*;
+import java.net.*;
+import java.io.*;
+
+public class FXMLDocumentController implements Initializable {
+
+ private Socket socket;
+
+ private DataInputStream in;
+ private DataOutputStream out;
+
+ @FXML
+ private Button sendButton;
+
+ @FXML
+ private TextArea TextArea;
+
+ @FXML
+ private TextField TextField;
+
+ @FXML
+ private void sendMsg(ActionEvent event) {
+ String str = TextField.getText();
+ try
+ {
+ out.writeUTF(str);
+ TextField.clear();
+ TextField.requestFocus();
+ }
+ catch (IOException ex)
+ {
+ ex.getStackTrace();
+ }
+ }
+ @Override
+ public void initialize(URL url, ResourceBundle rb) {
+
+ try {
+ socket = new Socket("localhost", 12345);
+ in = new DataInputStream(socket.getInputStream());
+ out = new DataOutputStream(socket.getOutputStream());
+
+ new Thread(() -> {
+ try {
+ while(true)
+ {
+ String str = in.readUTF();
+ TextArea.appendText(str + "\n");
+ }
+ }
+ catch (IOException ex) { ex.printStackTrace(); }
+ }).start();
+ }
+ catch(IOException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+}
\ No newline at end of file
diff --git a/homework7/src/hw7/server/ClientHandler.java b/homework7/src/hw7/server/ClientHandler.java
new file mode 100644
index 0000000..692c4eb
--- /dev/null
+++ b/homework7/src/hw7/server/ClientHandler.java
@@ -0,0 +1,86 @@
+package hw7.server;
+
+import java.net.*;
+import java.io.*;
+
+public class ClientHandler {
+
+ private MyServer server;
+ private Socket socket;
+ private DataInputStream in;
+ private DataOutputStream out;
+ private String clientName;
+
+ private static int counter = 0;
+
+ public ClientHandler(MyServer server, Socket socket)
+ {
+ try{
+ counter++;
+ this.clientName = "user" + Integer.toString(counter);
+ this.server = server;
+ this.socket = socket;
+ this.in = new DataInputStream(socket.getInputStream());
+ this.out = new DataOutputStream(socket.getOutputStream());
+
+
+ new Thread(()-> {
+
+ try
+ {
+ while(true)
+ {
+ String str = in.readUTF();
+
+ System.out.println("A message from a client: " + str);
+
+ if(str.equalsIgnoreCase("/end"))
+ { break; }
+ if(str.startsWith("/w"))
+ {
+ String to = str.split(" ")[1];
+ String msg = str.split(" ")[2];
+ server.wisperMsg(this, to, msg);
+ } else {
+ server.broadcastMsg("[" + this.clientName + "] " + str);
+ }
+ out.flush();
+ }
+ }
+ catch(IOException ex)
+ {
+ ex.printStackTrace();
+ }
+ finally
+ {
+ try
+ { in.close(); }
+ catch(IOException ex) { ex.printStackTrace(); }
+ try
+ { out.close(); }
+ catch(IOException ex) { ex.printStackTrace(); }
+ try
+ { socket.close(); }
+ catch(IOException ex) { ex.printStackTrace(); }
+
+ server.remove_client(this);
+ }
+
+ }).start();
+ }
+ catch(IOException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+
+ public String getClientName() {
+ return this.clientName;
+ }
+
+ public void sendMsg(String msg)
+ {try
+ { out.writeUTF(msg); }
+ catch(IOException ex){ex.printStackTrace(); }
+ }
+}
\ No newline at end of file
diff --git a/homework7/src/hw7/server/MyServer.java b/homework7/src/hw7/server/MyServer.java
new file mode 100644
index 0000000..700ba05
--- /dev/null
+++ b/homework7/src/hw7/server/MyServer.java
@@ -0,0 +1,53 @@
+package hw7.server;
+
+import java.net.*;
+import java.io.*;
+import java.util.Vector;
+public class MyServer {
+
+ private Vector clients;
+
+ public MyServer()
+ {
+ try
+ { ServerSocket serv_socket = new ServerSocket(12345);
+ clients = new Vector<>();
+
+ while(true) {
+ System.out.println("Waiting for a new client!");
+ Socket socket = serv_socket.accept();
+
+ ClientHandler cl = new ClientHandler(this, socket);
+ add_client(cl); }
+ }
+ catch(IOException ex) { ex.printStackTrace(); }
+ }
+
+ public void add_client(ClientHandler client)
+ {
+ clients.add(client);
+ }
+
+ public void remove_client(ClientHandler client)
+ {
+ clients.remove(client);
+ }
+
+ public void broadcastMsg(String msg)
+ {
+ for(ClientHandler client: clients) {
+ client.sendMsg(msg);
+ }
+ }
+
+ public void wisperMsg(ClientHandler from, String to, String msg)
+ {
+ for (ClientHandler client: clients) {
+ if(client.getClientName().equals(to)) {
+ client.sendMsg("[W from: " + from.getClientName() + "] " + msg);
+ break;
+ }
+ }
+ from.sendMsg("[W to: " + to + "] " + msg);
+ }
+}
\ No newline at end of file