167 lines
5.8 KiB
C#
167 lines
5.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace go01
|
|
{
|
|
public partial class RejoindrePartieReseau_client : Form
|
|
{
|
|
Thread ecouteThread;
|
|
System.Threading.Timer timerTTLdtListPart;
|
|
private DataTable dtListPart;
|
|
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
|
|
|
/*public struct partie_S
|
|
{
|
|
public string uid, partName, joueurAdverseName, ip;
|
|
public int taille, pionAaligner;
|
|
public partie_S(string uid, string partName, string joueurAdverseName, string ip, int taille, int pionAaligner)
|
|
{
|
|
this.uid = uid;
|
|
this.partName = partName;
|
|
this.joueurAdverseName = joueurAdverseName;
|
|
this.taille = taille;
|
|
this.pionAaligner = pionAaligner;
|
|
this.ip = ip;
|
|
}
|
|
public partie_S(string[] s, string ip)
|
|
{
|
|
this.uid = s[0];
|
|
this.partName = s[1];
|
|
this.joueurAdverseName = s[2];
|
|
this.taille = int.Parse(s[3]);
|
|
this.pionAaligner = int.Parse(s[4]);
|
|
this.ip = ip;
|
|
}
|
|
public override string ToString()
|
|
{
|
|
return uid;
|
|
}
|
|
public static implicit operator string(partie_S part)
|
|
{
|
|
return part.ToString();
|
|
}
|
|
}*/
|
|
|
|
public RejoindrePartieReseau_client()
|
|
{
|
|
InitializeComponent();
|
|
|
|
dtListPart = new DataTable();
|
|
|
|
dtListPart.Columns.Add("uid", typeof(string));
|
|
dtListPart.Columns.Add("partName", typeof(socketPlateau.ConfigGo_S));
|
|
dtListPart.Columns.Add("playerName", typeof(string));
|
|
dtListPart.Columns.Add("ip", typeof(string));
|
|
dtListPart.Columns.Add("port", typeof(int));//timeStamp
|
|
dtListPart.Columns.Add("timeStamp", typeof(DateTime));
|
|
|
|
ecouteThread = new Thread(() =>
|
|
{
|
|
Thread.CurrentThread.IsBackground = true;
|
|
Listen();
|
|
});
|
|
ecouteThread.Start();
|
|
|
|
var startTimeSpan = TimeSpan.Zero;
|
|
var periodTimeSpan = TimeSpan.FromSeconds(1);
|
|
timerTTLdtListPart = new System.Threading.Timer((ee) =>
|
|
{
|
|
|
|
TTLdtListPart();
|
|
}, null, startTimeSpan, periodTimeSpan);
|
|
|
|
}
|
|
|
|
private void Listen()
|
|
{
|
|
var Server = new UdpClient(8888);
|
|
while (1==1)
|
|
{
|
|
var ClientEp = new IPEndPoint(IPAddress.Any, 0);
|
|
byte[] ClientRequestData = Server.Receive(ref ClientEp);
|
|
using (MemoryStream ms = new MemoryStream(ClientRequestData))
|
|
{
|
|
socketPlateau.ConfigGo_S cfgGo = (socketPlateau.ConfigGo_S)binaryFormatter.Deserialize(ms);
|
|
Invoke(new Action(() => { ajoutPartie(cfgGo, ClientEp.Address.ToString()); }));
|
|
}
|
|
|
|
string ClientRequest = Encoding.ASCII.GetString(ClientRequestData);
|
|
Console.WriteLine("Recived {0} from {1}, sending response", ClientRequest, ClientEp.Address.ToString());
|
|
|
|
|
|
|
|
}
|
|
}
|
|
public void ajoutPartie(socketPlateau.ConfigGo_S cfgGo, string ip)
|
|
{
|
|
|
|
if(dtListPart.Select($"uid = '{cfgGo.Uid}'").Length==0)
|
|
dtListPart.Rows.Add(cfgGo.Uid, cfgGo, cfgGo.NomJoeurServeur, cfgGo.IpServeur, cfgGo.port, DateTime.Now);
|
|
//lock (DgvPart) ;
|
|
dtListPart.Select($"uid = '{cfgGo.Uid}'")[0]["timeStamp"] = DateTime.Now;
|
|
DgvPart.DataSource = dtListPart;
|
|
|
|
}
|
|
public void TTLdtListPart()
|
|
{
|
|
foreach(DataGridViewRow row in dgvPart.Rows)
|
|
{
|
|
if(((DateTime)row.Cells["timeStamp"].Value).AddSeconds(10) <= DateTime.Now)
|
|
{
|
|
Invoke(new Action(() => {
|
|
dgvPart.Rows.Remove(row);
|
|
dgvPart.Refresh();
|
|
}));
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void RejoindrePartieReseau_client_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void RejoindrePartieReseau_client_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
ecouteThread.Abort();
|
|
}
|
|
|
|
public DataGridView DgvPart
|
|
{
|
|
get { return this.dgvPart; }
|
|
set { }
|
|
}
|
|
|
|
private void dgvPart_Click(object sender, EventArgs e)
|
|
{
|
|
if (dgvPart.SelectedRows.Count <= 0)
|
|
return;
|
|
socketPlateau.ConfigGo_S cfg = (socketPlateau.ConfigGo_S)dgvPart.SelectedRows[0].Cells["partName"].Value;
|
|
tbIpServ.Text = cfg.IpServeur.ToString();
|
|
tbPort.Text = cfg.port.ToString();
|
|
}
|
|
|
|
private void btnJoin_Click(object sender, EventArgs e)
|
|
{
|
|
if (dgvPart.SelectedRows.Count <= 0)
|
|
return;
|
|
socketPlateau.ConfigGo_S cfg = (socketPlateau.ConfigGo_S)dgvPart.SelectedRows[0].Cells["partName"].Value;
|
|
cfg.NomJoeurClient = tbPlayername.Text;
|
|
socketPlateau sc = new socketPlateau(socketPlateau.TypeSocket_E.Client, cfg, null);
|
|
sc.senCmd(new socketPlateau.CommandeSocket_S(socketPlateau.commande_E.Join, cfg));
|
|
}
|
|
}
|
|
}
|