-
Notifications
You must be signed in to change notification settings - Fork 1
/
ClassNetworkServerBroadcast.cs
118 lines (95 loc) · 2.91 KB
/
ClassNetworkServerBroadcast.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows;
namespace LanTribune
{
abstract class ClassNetworkServerBroadcast
{
private class UdpState
{
public IPEndPoint E;
public UdpClient U;
}
private bool _messageReceived;
private Thread _serverThread;
private Thread _clientThread;
private Boolean _run;
public Boolean Run
{
get { return _run; }
set
{
_run = value;
if (!_run)
{
_serverThread.Abort();
}
}
}
protected ClassNetworkServerBroadcast()
{
Run = true;
}
public void LaunchServer()
{
_serverThread = new Thread(ServerThread);
_serverThread.Start();
while (!_serverThread.IsAlive){}
}
private void ServerReceiveCallback(IAsyncResult ar)
{
string returnData = "";
try
{
UdpClient udpClient = ((UdpState)(ar.AsyncState)).U;
IPEndPoint remoteIpEndPoint = ((UdpState)(ar.AsyncState)).E;
Byte[] receiveBytes = udpClient.EndReceive(ar, ref remoteIpEndPoint);
//remoteIpEndPoint.Address <- adresse du serveur distant
returnData = Encoding.ASCII.GetString(receiveBytes);
ServerAction(returnData);
}
catch (Exception e)
{
MessageBox.Show(e + "\r\n\r\n" + returnData);
}
_messageReceived = true;
}
private void ServerThread()
{
UdpClient udpClient = new UdpClient(8123);
while (_run)
{
IPEndPoint remoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
UdpState s = new UdpState
{
E = remoteIpEndPoint,
U = udpClient
};
udpClient.BeginReceive(ServerReceiveCallback, s);
while (!_messageReceived)
{
Thread.Sleep(10);
}
_messageReceived = false;
}
}
protected abstract void ServerAction(string data);
public void Send(string data)
{
_clientThread = new Thread(SendThread);
_clientThread.Start(data);
while (!_clientThread.IsAlive) { }
}
private void SendThread(object data)
{
UdpClient udpClient = new UdpClient();
udpClient.Connect(IPAddress.Broadcast, 8123);
Byte[] senddata = Encoding.ASCII.GetBytes(data.ToString());
udpClient.Send(senddata, senddata.Length);
udpClient.Close();
}
}
}