diff --git a/go01/CreerPartieReseau_serv.cs b/go01/CreerPartieReseau_serv.cs index d86a2e8..d2940b8 100644 --- a/go01/CreerPartieReseau_serv.cs +++ b/go01/CreerPartieReseau_serv.cs @@ -8,6 +8,7 @@ using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; @@ -38,19 +39,24 @@ namespace go01 var startTimeSpan = TimeSpan.Zero; var periodTimeSpan = TimeSpan.FromSeconds(5); Goban.ConfigGo_S config = new Goban.ConfigGo_S(tbPartName.Text, "", tbNomJoeur.Text, int.Parse(tbTaille.Text), int.Parse(tbPionaAligner.Text), IPAddress.Parse(tbIp.Text), int.Parse(tbPort.Text)); - serveur = new socketPlateauSRV(config, null, new socketPlateauSRV.OnJoinServ(ConnectionEtablie)); + serveur = new socketPlateauSRV(config, null, new socketPlateauSRV.OnConnected(ConnectionEtablie)); serveur.AttenteJoueur(); } - private void ConnectionEtablie(object o, socketPlateauServJoinArgs e) + private void ConnectionEtablie(object o, socketPlateauConnected e) { Console.WriteLine($"{e.ConfigGo.NomJoeurBlanc} vs {e.ConfigGo.NomJoeurNoir}"); - serveur.senCmd(new socketPlateauBase.CommandeSocket_S(socketPlateauBase.commande_E.Join, new socketPlateauServACKArgs(true))); + //serveur.senCmd(""); Console.WriteLine("CONNETION ETABLEIE"); - Plateau p = new Plateau(e.ConfigGo.taille, e.ConfigGo.PionAligner, e.ConfigGo.NomJoeurNoir, e.ConfigGo.NomJoeurBlanc); + Plateau p = new Plateau(e.ConfigGo,serveur); //this.Hide(); - p.ShowDialog(); + + Thread t2 = new Thread(delegate () + { + p.ShowDialog(); + }); + t2.Start(); //this.Close(); } private void broadcast() diff --git a/go01/Goban.cs b/go01/Goban.cs index 72f1ad5..ff4aeea 100644 --- a/go01/Goban.cs +++ b/go01/Goban.cs @@ -48,6 +48,7 @@ namespace go01 } Occupant_E[,] tableauOccupation; ConfigGo_S cfg; + private socketPlateauBase sck = null; #region struct&enum public enum Occupant_E { Vide, Blanc, Noir, LAST } @@ -139,7 +140,7 @@ namespace go01 fenetre.lblBlanc = playerWName + ":0"; fenetre.lblNoir = playerBName + ":0"; - + LabelPlayerTurn = new System.Windows.Forms.Label(); GenerationPlateau(false); //redrawAllpb(); } @@ -154,8 +155,24 @@ namespace go01 Tour = Joueur_E.Noir; //gen des tab tableauOccupation = new Occupant_E[cfg.taille, cfg.taille]; + LabelPlayerTurn = new System.Windows.Forms.Label(); GenerationPlateau(); } + public Goban(Plateau fenetre, PictureBox conteneur, ConfigGo_S cfg, socketPlateauBase sck) : this(fenetre,conteneur,cfg) + { + this.sck = sck; + sck.onReceived += new socketPlateauBase.OnReceived(reception); + } + public void reception(object e, socketPlateauServReception arg) + { + Console.WriteLine("ho"); + string str = (string) arg.cmd; + str.StartsWith("click"); + str = str.Substring(6); + int[] xy = GetXYStr(str); + placerPion(xy[0], xy[1], pboxList[xy[0]+xy[1]*cfg.taille]); + + } public Goban(Plateau fenetre, PictureBox conteneur, int dim, int nbPionAlignn, string playerW, string playerB) : this(fenetre,conteneur, new ConfigGo_S("",playerW,playerB,dim,nbPionAlignn)) { @@ -164,7 +181,7 @@ namespace go01 { PictureBox pb = (PictureBox)sender; String[] xy = ((PictureBox)sender).Name.Split(';'); - Console.WriteLine($"Click sur {xy[0]};{xy[1]} par {Tour}"); + Console.WriteLine($"PaintPb {xy[0]};{xy[1]}"); int x = int.Parse(xy[0]), y = int.Parse(xy[1]); if (tableauOccupation[x, y] != Occupant_E.Vide && !win) { @@ -185,30 +202,40 @@ namespace go01 String[] xy = ((PictureBox)sender).Name.Split(';'); Console.WriteLine($"Click sur {xy[0]};{xy[1]} par {Tour}"); int x = int.Parse(xy[0]), y = int.Parse(xy[1]); - if (tableauOccupation[x, y] == Occupant_E.Vide && !win) + placerPion(x, y, pb); + if (sck != null) + sck.senCmd($"click {x};{y}"); + } + private void placerPion(int x, int y, PictureBox pb) + { + pb.Invoke((MethodInvoker)(() => { - tableauOccupation[x, y] = (Tour == Joueur_E.Blanc) ? Occupant_E.Blanc : Occupant_E.Noir; - - using (Graphics gr = Graphics.FromHwnd((pb.Handle))) - { - SolidBrush b = (Tour == Joueur_E.Blanc)?new SolidBrush(Color.White):new SolidBrush(Color.Black);; - if (b != null) - gr.FillEllipse(b, 1, 0, pb.ClientSize.Width - 2, pb.ClientSize.Height - 1); - else - gr.DrawImage(pb.Image, 0, 0, pb.Width, pb.Height); - } - bool fin = win = RechercheTeritoir(x, y); - if (fin) + if (tableauOccupation[x, y] == Occupant_E.Vide && !win) { + tableauOccupation[x, y] = (Tour == Joueur_E.Blanc) ? Occupant_E.Blanc : Occupant_E.Noir; - x=((Tour == Joueur_E.Blanc)) ? ptNoir++:ptBlanc++; - Win(true); - MessageBox.Show("YOUR WIN" + ((Tour == Joueur_E.Blanc) ? playerWName : playerBName)); + using (Graphics gr = Graphics.FromHwnd((pb.Handle))) + { + SolidBrush b = (Tour == Joueur_E.Blanc) ? new SolidBrush(Color.White) : new SolidBrush(Color.Black); ; + if (b != null) + gr.FillEllipse(b, 1, 0, pb.ClientSize.Width - 2, pb.ClientSize.Height - 1); + else + gr.DrawImage(pb.Image, 0, 0, pb.Width, pb.Height); + } + bool fin = win = RechercheTeritoir(x, y); + if (fin) + { + + x = ((Tour == Joueur_E.Blanc)) ? ptNoir++ : ptBlanc++; + Win(true); + MessageBox.Show("YOUR WIN" + ((Tour == Joueur_E.Blanc) ? playerWName : playerBName)); + } + Console.WriteLine(fin); + if (!win) + Tour = (Tour + 1 == Joueur_E.LAST) ? Joueur_E.Blanc : Tour + 1; } - Console.WriteLine(fin); - if(!win) - Tour = (Tour + 1 == Joueur_E.LAST) ? Joueur_E.Blanc : Tour + 1; - } + })); + } private int[] GetXY(int i) { @@ -392,14 +419,14 @@ namespace go01 public void GenerationPlateau(bool initTableauOccupation) { //label qui indique à qui le tour - LabelPlayerTurn = new System.Windows.Forms.Label(); + this.LabelPlayerTurn.AutoSize = true; this.LabelPlayerTurn.Font = new System.Drawing.Font("Matura MT Script Capitals", 40F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.LabelPlayerTurn.ForeColor = System.Drawing.SystemColors.ControlText; this.LabelPlayerTurn.Location = new System.Drawing.Point(529, 13); this.LabelPlayerTurn.Name = "LabelPlayerTurn"; this.LabelPlayerTurn.TabIndex = 1; - this.LabelPlayerTurn.Text = "playerW"; + this.LabelPlayerTurn.Text = (tour==Joueur_E.Blanc)?cfg.NomJoeurBlanc:cfg.NomJoeurNoir; Fenetre.Controls.Add(this.LabelPlayerTurn); for (int i = 0; i < cfg.taille * cfg.taille; i++) //Genération du goban @@ -436,15 +463,14 @@ namespace go01 if (initTableauOccupation) { tableauOccupation[i % cfg.taille, i / cfg.taille] = Occupant_E.Vide; - } pboxList[i].Name = (i % cfg.taille).ToString() + ";" + (i / cfg.taille).ToString(); pboxList[i].Click += new System.EventHandler(this.pictureBox1_Click); - pboxList[i].Paint += new PaintEventHandler(this.PaintPb); + pboxList[i].Paint += new PaintEventHandler(this.PaintPb); Conteneur.Controls.Add(pboxList[i]); - pboxList[i].Invalidate(); + //pboxList[i].Invalidate(); } - Conteneur.Invalidate(); + //Conteneur.Invalidate(); //redrawAllpb(); } diff --git a/go01/Plateau.cs b/go01/Plateau.cs index 2d42178..dd31b6f 100644 --- a/go01/Plateau.cs +++ b/go01/Plateau.cs @@ -18,13 +18,16 @@ namespace go01 enum CouleurVoulue { Red, Green, Blue, Black, LAST } CouleurVoulue[,] tableauCouleur = new CouleurVoulue[19,19]; List pboxList = new List(); - Goban g; + Goban g=null; + socketPlateauBase sck = null; + Goban.ConfigGo_S? cfg=null; + Goban.sauvegarde_S? sauvegarde = null; int dim; int nbPionAlign; string playerW; string playerB; public Plateau(Goban.sauvegarde_S s) { InitializeComponent(); this.Text = $"Morpion {s.cfg.taille}x{s.cfg.taille}"; - g = new Goban(this, pictureBox1, s); + sauvegarde = s; } public Plateau(int dim, int nbPionAlign, string playerW, string playerB) { @@ -34,7 +37,12 @@ int dim; int nbPionAlign; string playerW; string playerB; this.nbPionAlign = nbPionAlign; this.playerW = playerW; this.playerB = playerB; - + } + public Plateau(Goban.ConfigGo_S cfg, socketPlateauBase sck) : this(cfg.taille, cfg.pionaAligner, cfg.NomJoeurBlanc, cfg.NomJoeurNoir) + { + this.cfg = cfg; + this.sck = sck; + this.Text = $"Morpion {dim}x{dim} "+sck.SocFlag; } private void pictureBox1_Click(object sender, EventArgs e) @@ -62,7 +70,10 @@ int dim; int nbPionAlign; string playerW; string playerB; private void Plateau_Load(object sender, EventArgs e) { //base.OnLoad(e); - g = new Goban(this, pictureBox1, dim, nbPionAlign, playerW, playerB); + if (sck != null && cfg != null && sck != null) + g = new Goban(this, pictureBox1, cfg.Value, sck); + else + g = new Goban(this, pictureBox1, dim, nbPionAlign, playerW, playerB); this.DoubleBuffered = true; } diff --git a/go01/RejoindrePartieReseau_client.cs b/go01/RejoindrePartieReseau_client.cs index 3ec6180..ce08c60 100644 --- a/go01/RejoindrePartieReseau_client.cs +++ b/go01/RejoindrePartieReseau_client.cs @@ -177,11 +177,16 @@ namespace go01 //################################################################################################ //################################################################################################ Console.WriteLine("CONNECTION ETABLEIE"); - p = new Plateau(cfg.taille, cfg.PionAligner, cfg.NomJoeurBlanc, cfg.NomJoeurNoir); - p.Show(); + Plateau p = new Plateau(e.ConfigGo, (socketPlateauBase) o); + //this.Hide(); + Thread t2 = new Thread(delegate () + { + p.ShowDialog(); + }); + t2.Start(); //this.Hide(); - // p.ShowDialog(); + // p.ShowDialog(); //this.Close(); } } diff --git a/go01/socketPlateauBase.cs b/go01/socketPlateauBase.cs index edd2640..853efa1 100644 --- a/go01/socketPlateauBase.cs +++ b/go01/socketPlateauBase.cs @@ -52,6 +52,7 @@ namespace go01 } } protected TypeSocket_E socFlag = 0; + public TypeSocket_E SocFlag { get => socFlag; } protected IPAddress adresseIpCourante; protected int port; protected static Boolean connexionEtablie = false; @@ -72,13 +73,13 @@ namespace go01 } #region commun - protected void InitialiserReception(Socket sArg) + protected void InitialiserReceptionAsync(Socket sArg) { var netStream = new NetworkStream(sArg, true); var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); - CommandeSocket_S cmd = (CommandeSocket_S)binaryFormatter.Deserialize(netStream); + object cmd = (object)binaryFormatter.Deserialize(netStream); try { onReceived?.Invoke(this, new socketPlateauServReception(cmd)); } catch (Exception e) { Console.WriteLine(e); } - InitialiserReception(sArg); + InitialiserReceptionAsync(sArg); } public void senCmd(object cmd) { diff --git a/go01/socketPlateauCLI.cs b/go01/socketPlateauCLI.cs index fdc5969..4b4503e 100644 --- a/go01/socketPlateauCLI.cs +++ b/go01/socketPlateauCLI.cs @@ -44,7 +44,7 @@ namespace go01 if (sTmp.Connected) { connexionEtablie = true; try { onConnected?.Invoke(this, new socketPlateauConnected(cfgGo)); } catch (Exception e) { Console.WriteLine(e); } - InitialiserReception(sTmp); + InitialiserReceptionAsync(sTmp); } else { MessageBox.Show("Serveur innacessible"); } diff --git a/go01/socketPlateauEventArgs.cs b/go01/socketPlateauEventArgs.cs index b39d007..5a772d2 100644 --- a/go01/socketPlateauEventArgs.cs +++ b/go01/socketPlateauEventArgs.cs @@ -32,8 +32,8 @@ namespace go01 } public class socketPlateauServReception : EventArgs { - public socketPlateauBase.CommandeSocket_S cmd; - public socketPlateauServReception(socketPlateauBase.CommandeSocket_S cmd) + public object cmd; + public socketPlateauServReception(object cmd) { this.cmd = cmd; } diff --git a/go01/socketPlateauSRV.cs b/go01/socketPlateauSRV.cs index 63b4678..4845246 100644 --- a/go01/socketPlateauSRV.cs +++ b/go01/socketPlateauSRV.cs @@ -94,7 +94,7 @@ namespace go01 connexionEtablie = true; try { onConnected?.Invoke(this, new socketPlateauConnected(cfgGo)); } catch (Exception e) { Console.WriteLine(e); } timerBroadcast.Dispose(); - InitialiserReception(socCli); + InitialiserReceptionAsync(socCli); } else if (socFlag == TypeSocket_E.Serveur && connexionEtablie) {