Ça me dérange pas de poster une partie de ma classe réseau. Ça bug lors de la réception des octets donc voici à quoi ça ressemble à ce niveau là:
private void onAccept(object sender, SocketAsyncEventArgs Saea)
{
if (Saea.LastOperation == SocketAsyncOperation.Accept)
{
socketCommunication = Saea.AcceptSocket;
SocketAsyncEventArgs SAEARECEIVE = new SocketAsyncEventArgs();
SAEARECEIVE.Completed += new EventHandler<SocketAsyncEventArgs>(onReceive);
byte[] messagereceived = new byte[1024];
SAEARECEIVE.SetBuffer(messagereceived, 0, 1024);
socketCommunication.ReceiveAsync(SAEARECEIVE);
}
}
private void onReceive(object sender, SocketAsyncEventArgs SAEA)
{
try {
if (SAEA.LastOperation == SocketAsyncOperation.Receive)
{
string message = Encoding.Unicode.GetString(SAEA.Buffer);
string[] splitmessage = message.Split('|');
switch (splitmessage[0])
{
case "m":
partie.locationChanger(Convert.ToInt32(splitmessage[1]), Convert.ToInt32(splitmessage[2]));
break;
case "start":
partie = new Game1(this);
panel.BeginInvoke(new Action(() =>
{
partie.Run();
}));
break;
case "b":
partie.bouffeLocation(Convert.ToInt32(splitmessage[1]), Convert.ToInt32(splitmessage[2]));
break;
case "d":
panel.BeginInvoke(new Action(() =>
{
panel.ecrire(splitmessage[1]);
}));
break;
}
SocketAsyncEventArgs SAEARECEIVE = new SocketAsyncEventArgs();
SAEARECEIVE.Completed += new EventHandler<SocketAsyncEventArgs>(onReceive);
byte[] messagereceived = new byte[1024];
SAEARECEIVE.SetBuffer(messagereceived, 0, 1024);
socketCommunication.ReceiveAsync(SAEARECEIVE);
}
}
catch(Exception E)
{
}
}