Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
S
SC4 - Messaging app
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
am13g23
SC4 - Messaging app
Commits
cedaf17c
Commit
cedaf17c
authored
1 year ago
by
am13g23
Browse files
Options
Downloads
Patches
Plain Diff
Upload New File
parent
1e1bb896
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
MessageClient.java
+205
-0
205 additions, 0 deletions
MessageClient.java
with
205 additions
and
0 deletions
MessageClient.java
0 → 100644
+
205
−
0
View file @
cedaf17c
import
javax.swing.*
;
import
java.awt.*
;
import
java.awt.event.*
;
import
java.io.BufferedReader
;
import
java.io.InputStreamReader
;
import
java.io.PrintWriter
;
import
java.net.InetAddress
;
import
java.net.ServerSocket
;
import
java.net.Socket
;
public
class
MessageClient
extends
JFrame
implements
ActionListener
{
private
Container
content
;
private
JLabel
usernameLabel
;
private
JTextField
username
;
private
JButton
join
;
private
JButton
connect
;
private
JTextField
chat
;
private
JTextPane
messages
;
private
JScrollPane
messageBoard
;
private
JTextField
messageBar
;
private
JButton
send
;
private
boolean
openSession
;
private
InetAddress
ip
=
InetAddress
.
getByName
(
"schming.webredirect.org"
);
private
int
listenPort
;
private
Socket
socket
;
public
MessageClient
()
throws
Exception
{
super
(
"Message client"
);
//set up window and content pane
content
=
new
Container
();
this
.
setContentPane
(
content
);
this
.
setSize
(
720
,
720
);
this
.
setResizable
(
false
);
this
.
setDefaultCloseOperation
(
JFrame
.
EXIT_ON_CLOSE
);
usernameLabel
=
new
JLabel
(
"Username:"
);
//set up all the GUI components
usernameLabel
.
setSize
(
100
,
30
);
usernameLabel
.
setLocation
(
60
,
10
);
content
.
add
(
usernameLabel
);
username
=
new
JTextField
();
username
.
setSize
(
400
,
30
);
username
.
setLocation
(
135
,
10
);
content
.
add
(
username
);
connect
=
new
JButton
();
connect
.
setText
(
"Connect"
);
connect
.
setSize
(
100
,
30
);
connect
.
setLocation
(
560
,
10
);
connect
.
addActionListener
(
this
);
connect
.
setActionCommand
(
"toggleConnect"
);
content
.
add
(
connect
);
chat
=
new
JTextField
();
chat
.
setSize
(
475
,
30
);
chat
.
setLocation
(
60
,
50
);
chat
.
setEnabled
(
false
);
content
.
add
(
chat
);
join
=
new
JButton
();
join
.
setText
(
"Join"
);
join
.
setSize
(
100
,
30
);
join
.
setLocation
(
560
,
50
);
join
.
addActionListener
(
this
);
join
.
setActionCommand
(
"toggleJoin"
);
join
.
setEnabled
(
false
);
content
.
add
(
join
);
messages
=
new
JTextPane
();
messages
.
setEditable
(
false
);
messageBoard
=
new
JScrollPane
(
messages
);
messageBoard
.
setSize
(
600
,
500
);
messageBoard
.
setLocation
(
60
,
110
);
content
.
add
(
messageBoard
);
messageBar
=
new
JTextField
();
messageBar
.
setSize
(
475
,
30
);
messageBar
.
setLocation
(
60
,
625
);
messageBar
.
setEnabled
(
false
);
content
.
add
(
messageBar
);
send
=
new
JButton
();
send
.
setText
(
"Send"
);
send
.
setSize
(
100
,
30
);
send
.
setLocation
(
560
,
625
);
send
.
addActionListener
(
this
);
send
.
setActionCommand
(
"send"
);
send
.
setEnabled
(
false
);
content
.
add
(
send
);
this
.
addWindowListener
(
new
WindowAdapter
(){
//add code to run on closing
@Override
public
void
windowClosing
(
WindowEvent
e
)
{
//if there is still an active session, send a request to end it to the server
if
(
openSession
){
try
{
String
response
=
sendRequest
(
"close/"
+
listenPort
);
System
.
out
.
println
(
response
);
socket
.
close
();
}
catch
(
Exception
ex
){
throw
new
RuntimeException
(
ex
);
}
}
}
});
openSession
=
false
;
//initialise a flag as to whether or not there is an open session
listenPort
=
1025
;
//find the first open port
boolean
free
=
false
;
while
(!
free
){
try
{
ServerSocket
test
=
new
ServerSocket
(
listenPort
);
test
.
close
();
free
=
true
;
}
catch
(
Exception
e
){
listenPort
++;
}
}
}
public
String
sendRequest
(
String
request
)
throws
Exception
{
//method to send a request to the server
socket
=
new
Socket
(
ip
,
2001
);
PrintWriter
sender
=
new
PrintWriter
(
socket
.
getOutputStream
());
sender
.
println
(
request
);
sender
.
flush
();
BufferedReader
listener
=
new
BufferedReader
(
new
InputStreamReader
(
socket
.
getInputStream
()));
String
response
=
listener
.
readLine
();
socket
.
close
();
return
response
;
}
public
void
actionPerformed
(
ActionEvent
e
){
//code to handle all button presses
try
{
String
text
=
messages
.
getText
();
if
(
e
.
getActionCommand
().
equals
(
"toggleConnect"
))
{
//if it is the connect button
if
(
connect
.
getText
().
equals
(
"Connect"
))
{
//if we are currently unconnected
if
(
username
.
getText
().
equals
(
""
)
||
username
.
getText
().
contains
(
"/"
)){
//check if the username is invalid, if so inform the user
messages
.
setText
(
text
+
"Invalid username\n"
);
}
else
{
//else, send a request, print the response, enable/disable all relevant buttons and toggle the button to disconnect
String
response
=
sendRequest
(
"open/"
+
listenPort
+
"/"
+
username
.
getText
());
messages
.
setText
(
text
+
response
+
"\n"
);
chat
.
setEnabled
(
true
);
join
.
setEnabled
(
true
);
username
.
setEnabled
(
false
);
connect
.
setText
(
"Disconnect"
);
}
}
else
{
//else we are connected, so send a disconnect request, enable/disable all relevant buttons and toggle the button to connect
String
response
=
sendRequest
(
"close/"
+
listenPort
);
messages
.
setText
(
text
+
response
+
"\n"
);
chat
.
setEnabled
(
false
);
join
.
setEnabled
(
false
);
messageBar
.
setEnabled
(
false
);
send
.
setEnabled
(
false
);
username
.
setEnabled
(
true
);
chat
.
setText
(
""
);
messageBar
.
setText
(
""
);
join
.
setText
(
"Join"
);
connect
.
setText
(
"Connect"
);
}
}
else
if
(
e
.
getActionCommand
().
equals
(
"toggleJoin"
))
{
//same as previous but for joining a chat
if
(
join
.
getText
().
equals
(
"Join"
))
{
if
(
chat
.
getText
().
equals
(
""
)
||
chat
.
getText
().
equals
(
"NotInAChat"
)
||
username
.
getText
().
contains
(
"/"
)){
messages
.
setText
(
text
+
"Invalid chat name\n"
);
}
else
{
String
response
=
sendRequest
(
"join/"
+
listenPort
+
"/"
+
chat
.
getText
());
messages
.
setText
(
text
+
response
+
"\n"
);
messageBar
.
setEnabled
(
true
);
send
.
setEnabled
(
true
);
chat
.
setEnabled
(
false
);
join
.
setText
(
"Leave"
);
openSession
=
true
;
}
}
else
{
String
response
=
sendRequest
(
"leave/"
+
listenPort
);
messages
.
setText
(
text
+
response
+
"\n"
);
messageBar
.
setEnabled
(
false
);
send
.
setEnabled
(
false
);
chat
.
setEnabled
(
true
);
messageBar
.
setText
(
""
);
join
.
setText
(
"Join"
);
openSession
=
false
;
}
}
else
if
(
e
.
getActionCommand
().
equals
(
"send"
))
{
//if it is the send button, check if the message is valid, if so send a request, else inform the user it is invalid
if
(
messageBar
.
getText
().
contains
(
"/"
))
{
messages
.
setText
(
text
+
"Message contains banned characters\n"
);
}
else
{
sendRequest
(
"message/"
+
listenPort
+
"/"
+
messageBar
.
getText
());
}
}
}
catch
(
Exception
ex
){
throw
new
RuntimeException
(
ex
);
}
}
public
JTextPane
getMessages
(){
//getter for the message text pane
return
messages
;
}
public
int
getListenPort
(){
//getter for the listen port number
return
listenPort
;
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
MessageClient
window
=
new
MessageClient
();
//open a new window and a server socket o listen for responses
ServerSocket
listenSocket
=
new
ServerSocket
(
window
.
getListenPort
());
window
.
show
();
while
(
true
){
//continuously listen for the next response, printing it when it comes through
Socket
socket
=
listenSocket
.
accept
();
BufferedReader
reader
=
new
BufferedReader
(
new
InputStreamReader
(
socket
.
getInputStream
()));
String
message
=
reader
.
readLine
();
socket
.
close
();
String
messages
=
window
.
getMessages
().
getText
();
messages
+=
message
+
"\n"
;
window
.
getMessages
().
setText
(
messages
);
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment