StartRDP
This commit is contained in:
parent
749f1d2bc3
commit
d5494b3f97
3 changed files with 74 additions and 11 deletions
|
@ -77,6 +77,8 @@ namespace ZoFo.GameCore
|
||||||
|
|
||||||
public void JoinRoom(string ip, int port)
|
public void JoinRoom(string ip, int port)
|
||||||
{
|
{
|
||||||
|
EndPoint endPoint = new IPEndPoint(IPAddress.Parse(ip), port);
|
||||||
|
networkManager.EndPointServer = endPoint;
|
||||||
networkManager.JoinRoom(ip, port);
|
networkManager.JoinRoom(ip, port);
|
||||||
}
|
}
|
||||||
public void JoinYourself(int port) { networkManager.JoinYourself(port); }
|
public void JoinYourself(int port) { networkManager.JoinYourself(port); }
|
||||||
|
|
|
@ -74,6 +74,7 @@ public class SelectingServerGUI : AbstractGUI
|
||||||
{
|
{
|
||||||
if (int.TryParse(endpoint[1], out port))
|
if (int.TryParse(endpoint[1], out port))
|
||||||
{
|
{
|
||||||
|
|
||||||
client.JoinRoom(endpoint[0], port);
|
client.JoinRoom(endpoint[0], port);
|
||||||
AppManager.Instance.SetClient(client);
|
AppManager.Instance.SetClient(client);
|
||||||
AppManager.Instance.SetGUI(new WaitingForPlayersGUI(false));
|
AppManager.Instance.SetGUI(new WaitingForPlayersGUI(false));
|
||||||
|
|
|
@ -20,11 +20,13 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
||||||
private IPEndPoint endPoint;
|
private IPEndPoint endPoint;
|
||||||
private Socket socket;
|
private Socket socket;
|
||||||
List<UpdateData> updates = new List<UpdateData>();
|
List<UpdateData> updates = new List<UpdateData>();
|
||||||
|
private List<Datagramm> waitingDatagramm = new List<Datagramm>();
|
||||||
|
private int currentServerDatagrammId = 0;
|
||||||
public delegate void OnDataSent(string Data);
|
public delegate void OnDataSent(string Data);
|
||||||
public event OnDataSent GetDataSent; // event
|
public event OnDataSent GetDataSent; // event
|
||||||
public bool IsConnected { get { return socket.Connected; } }
|
public bool IsConnected { get { return socket.Connected; } }
|
||||||
public IPEndPoint InfoConnect => (IPEndPoint)socket.LocalEndPoint ?? endPoint;
|
public IPEndPoint InfoConnect => (IPEndPoint)socket.LocalEndPoint ?? endPoint;
|
||||||
|
public EndPoint EndPointServer { get; set; }
|
||||||
public ClientNetworkManager()
|
public ClientNetworkManager()
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
@ -51,12 +53,66 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
||||||
updates.Add(UpdateData);
|
updates.Add(UpdateData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Working With Data RDP
|
||||||
|
|
||||||
|
public void AnalyzeData(string data)
|
||||||
|
{
|
||||||
|
Datagramm Dgramm = JsonSerializer.Deserialize<Datagramm>(data);
|
||||||
|
if (Dgramm.isImportant)
|
||||||
|
{
|
||||||
|
if (Dgramm.DatagrammId == currentServerDatagrammId + 1)
|
||||||
|
{
|
||||||
|
ExecuteDatagramm(Dgramm);
|
||||||
|
currentServerDatagrammId++;
|
||||||
|
CheckDatagramm();
|
||||||
|
}
|
||||||
|
else if (Dgramm.DatagrammId > currentServerDatagrammId + 1)
|
||||||
|
{
|
||||||
|
waitingDatagramm.Add(Dgramm);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console.WriteLine("Апдейты " + Dgramm.DatagrammId + ", уже приходили, пропускаем");
|
||||||
|
}
|
||||||
|
SendAcknowledgement(Dgramm.DatagrammId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ExecuteDatagramm(Dgramm);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
public void SendAcknowledgement(int DatagrammId)
|
||||||
|
{
|
||||||
|
|
||||||
|
Datagramm Dgramm = new Datagramm() { DatagrammId = DatagrammId };
|
||||||
|
string data = JsonSerializer.Serialize(Dgramm);
|
||||||
|
byte[] buffer = Encoding.UTF8.GetBytes(data);
|
||||||
|
socket.SendTo(buffer, EndPointServer);
|
||||||
|
|
||||||
|
}
|
||||||
|
void CheckDatagramm()
|
||||||
|
{
|
||||||
|
Datagramm orderedDgramm = waitingDatagramm.Find(x => x.DatagrammId == currentServerDatagrammId + 1);
|
||||||
|
while (orderedDgramm != null)
|
||||||
|
{
|
||||||
|
ExecuteDatagramm(orderedDgramm);
|
||||||
|
currentServerDatagrammId++;
|
||||||
|
orderedDgramm = waitingDatagramm.Find(x => x.DatagrammId == currentServerDatagrammId + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ExecuteDatagramm(Datagramm Dgramm)
|
||||||
|
{
|
||||||
|
//Достаёт Update и передает в ивент
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
public void StopConnection()
|
public void StopConnection()
|
||||||
{
|
{
|
||||||
socket.Shutdown(SocketShutdown.Both);
|
socket.Shutdown(SocketShutdown.Both);
|
||||||
socket.Close();
|
socket.Close();
|
||||||
}
|
}
|
||||||
|
#region Join
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// приложение пытается подключиться к комнате
|
/// приложение пытается подключиться к комнате
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -95,7 +151,7 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
||||||
listen.IsBackground = true;
|
listen.IsBackground = true;
|
||||||
listen.Start();
|
listen.Start();
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
public static IPAddress GetIp()
|
public static IPAddress GetIp()
|
||||||
{
|
{
|
||||||
string hostName = Dns.GetHostName(); // Retrive the Name of HOST
|
string hostName = Dns.GetHostName(); // Retrive the Name of HOST
|
||||||
|
@ -114,12 +170,16 @@ namespace ZoFo.GameCore.GameManagers.NetworkManager
|
||||||
//поток 2
|
//поток 2
|
||||||
public void StartListening()
|
public void StartListening()
|
||||||
{
|
{
|
||||||
while(socket.Connected)
|
byte[] buffer = new byte[65535];
|
||||||
|
string data;
|
||||||
|
while (socket != null)
|
||||||
{
|
{
|
||||||
byte[] bytes = new byte[65535];
|
EndPoint senderRemote = new IPEndPoint(IPAddress.Any, 0);
|
||||||
var countAnsw = socket.Receive(bytes, SocketFlags.Partial); //Вылетает если кто то закрыл
|
int size = socket.ReceiveFrom(buffer, buffer.Length, SocketFlags.None, ref senderRemote);
|
||||||
string update = Encoding.UTF8.GetString(bytes, 0, countAnsw); // обновление отосланные сервером
|
byte[] correctedBuffer = new byte[size];
|
||||||
GetDataSent(update);
|
Array.Copy(buffer, correctedBuffer, size);
|
||||||
|
data = Encoding.UTF8.GetString(correctedBuffer);
|
||||||
|
AnalyzeData(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue