Skip to content
This repository was archived by the owner on Jun 23, 2022. It is now read-only.

Commit 46a7a84

Browse files
committed
Revert "Moving client methods to another class"
This reverts commit 2d71422.
1 parent 2344b1f commit 46a7a84

File tree

4 files changed

+157
-130
lines changed

4 files changed

+157
-130
lines changed

Cynobroad/Client.Designer.cs

Lines changed: 42 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cynobroad/Client.cs

Lines changed: 115 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ public partial class Client : Form
1919
private int port = 42069;
2020
private string serverIP = "";
2121

22+
//Connection handlers
23+
private Thread receivingThread;
24+
private Thread sendingThread;
25+
private TcpClient _client;
26+
private StreamReader _sReader;
27+
private StreamWriter _sWriter;
28+
private bool isConnected = false;
29+
2230
private List<string> connectedUsers = new List<string>();
2331

2432
//Messages to send
@@ -66,15 +74,27 @@ private void Client_Load(object sender, EventArgs e)
6674
User_UsernameLabel.Text = username;
6775
User_ConnectedServer.Text = serverIP;
6876

69-
InitializeConnection();
77+
try
78+
{
79+
_client = new TcpClient();
80+
isConnected = true;
81+
InitializeConnection();
7082

71-
Show();
72-
SendMsgBox.Focus();
83+
//show main form and close login dialog
84+
Show();
85+
SendMsgBox.Focus();
86+
}
87+
catch
88+
{
89+
isConnected = false;
90+
}
7391
}
7492

7593
//if connection failed set status to red, else green
76-
User_ConnectionStatus.BackColor = Color.FromArgb(224, 102, 102);
77-
User_ConnectionStatus.BackColor = Color.FromArgb(147, 196, 125);
94+
if (!isConnected)
95+
User_ConnectionStatus.BackColor = Color.FromArgb(224, 102, 102);
96+
else
97+
User_ConnectionStatus.BackColor = Color.FromArgb(147, 196, 125);
7898
}
7999

80100
private void SelfHoster_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
@@ -84,7 +104,6 @@ private void SelfHoster_DoWork(object sender, System.ComponentModel.DoWorkEventA
84104

85105
private void CreateAndSendPacket(string type, string message = null)
86106
{
87-
//TODO: make this specify server and channel names
88107
PacketStruct packetStruct = new PacketStruct
89108
{
90109
Type = type,
@@ -97,7 +116,22 @@ private void CreateAndSendPacket(string type, string message = null)
97116

98117
private void InitializeConnection()
99118
{
100-
//TODO: create instance of client and add it to an accessible dictionary or something
119+
//connect to server ip on port 42069
120+
_client.Connect(serverIP, port);
121+
_sWriter = new StreamWriter(_client.GetStream(), Encoding.ASCII);
122+
_sReader = new StreamReader(_client.GetStream(), Encoding.ASCII);
123+
124+
//start a background task handling incoming messages
125+
ThreadStart startReceiver = new ThreadStart(HandleReceiver);
126+
receivingThread = new Thread(startReceiver)
127+
{ IsBackground = true };
128+
receivingThread.Start();
129+
130+
//start a background task handling outgoing messages
131+
ThreadStart startSender = new ThreadStart(HandleSender);
132+
sendingThread = new Thread(startSender)
133+
{ IsBackground = true };
134+
sendingThread.Start();
101135
}
102136

103137
private void HandleReceiver()
@@ -106,12 +140,23 @@ private void HandleReceiver()
106140
AddRichMsg addRichMsg = RichMessageReceived;
107141
AddUserBlock addUser = AddConnectedUser;
108142
DelUserBlock delUser = RemoveConnectedUser;
109-
143+
144+
//send to server join message
145+
PacketStruct packetStruct = new PacketStruct
146+
{
147+
Type = "join",
148+
User = username
149+
};
150+
_sWriter.WriteLine(JsonConvert.SerializeObject(packetStruct));
151+
_sWriter.Flush();
152+
153+
//while connected, recieve messages and process them
110154
PacketStruct packet = new PacketStruct();
111-
while (true)
155+
while (isConnected)
112156
{
113-
//Get packet from client instance and process
114-
packet = new PacketStruct();
157+
//Deserialize packet from StreamReader
158+
try { packet = JsonConvert.DeserializeObject<PacketStruct>(_sReader.ReadLine()); }
159+
catch { packet = new PacketStruct(); }
115160

116161
switch (packet.Type)
117162
{
@@ -159,7 +204,20 @@ private void HandleReceiver()
159204

160205
private void HandleSender()
161206
{
162-
//TODO: Route packet to correct client instance
207+
//while connected, if there are messages to send, send them
208+
while (isConnected)
209+
{
210+
if (!MessageQueue.IsEmpty)
211+
{
212+
foreach (string msg in MessageQueue)
213+
{
214+
MessageQueue.TryDequeue(out string str);
215+
_sWriter.WriteLine(msg);
216+
_sWriter.Flush();
217+
}
218+
}
219+
Thread.Sleep(10);
220+
}
163221
}
164222

165223
private void RichMessageReceived(Tuple<string,string> nameAndMessage)
@@ -298,13 +356,55 @@ private void Window_Close_Click(object sender, EventArgs e)
298356

299357
private void Client_FormClosing(object sender, FormClosingEventArgs e)
300358
{
301-
//TODO: close all client connections
302-
SelfHoster.Dispose();
359+
if (isConnected)
360+
CreateAndSendPacket("close");
303361
}
304362

305363
private void Button_SignOut_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
306364
{
307-
//send closing request to single client
365+
//send closing request and reset variables
366+
CreateAndSendPacket("close");
367+
Thread.Sleep(10);
368+
isConnected = false;
369+
_client.Close();
370+
SelfHoster.Dispose();
371+
372+
//rerun launch method to sign in again
373+
Client_Load(sender, e);
374+
}
375+
376+
private void Button_Reconnect_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
377+
{
378+
//try reconnection and set connection bool
379+
try
380+
{
381+
InitializeConnection();
382+
isConnected = true;
383+
}
384+
catch (SocketException) { }
385+
catch { isConnected = false; }
386+
387+
if (_client.Connected)
388+
isConnected = true;
389+
else
390+
isConnected = false;
391+
392+
//useless visual effect
393+
for (int i = 0; i < 3; i++)
394+
{
395+
User_ConnectionStatus.BackColor = Color.FromArgb(255, 217, 102);
396+
Update();
397+
Thread.Sleep(500);
398+
User_ConnectionStatus.BackColor = Color.FromArgb(183, 183, 183);
399+
Update();
400+
Thread.Sleep(500);
401+
}
402+
403+
//update connection status indicator
404+
if (!isConnected)
405+
User_ConnectionStatus.BackColor = Color.FromArgb(224, 102, 102);
406+
else
407+
User_ConnectionStatus.BackColor = Color.FromArgb(147, 196, 125);
308408
}
309409

310410
private void SendMsgBox_KeyDown(object sender, KeyEventArgs e)

Cynobroad/Cynobroad.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@
101101
<Compile Include="PacketStruct.cs" />
102102
<Compile Include="Program.cs" />
103103
<Compile Include="Properties\AssemblyInfo.cs" />
104-
<Compile Include="TCPClient.cs" />
105104
<Compile Include="TCPServer.cs" />
106105
<EmbeddedResource Include="Client.resx">
107106
<DependentUpon>Client.cs</DependentUpon>

0 commit comments

Comments
 (0)