private void OnReceive(IAsyncResult ar)
{
try
{
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);
EndPoint epSender = (EndPoint)ipeSender;
serverSocket.EndReceiveFrom(ar, ref epSender);
//Transformar o array de bytes recebido do utilizador num objecto de dados
Data msgReceived = new Data(byteData);
//Enviar o objecto em resposta aos pedidos dos clientes
Data msgToSend = new Data();
byte[] message;
message = msgToSend.ToByte();
if (msgReceived.cmdCommand == Command.Login)
{
ClientInfo clientI = new ClientInfo();
clientI.strName = msgReceived.strName;
clientI.endpoint = epSender;
clientList.Add(clientI);
}
if (msgReceived.cmdCommand == Command.Atacar)
{
foreach (ClientInfo clientI in clientList)
{
if (clientI.strName != msgReceived.strName)
{
msgToSend.strMessage = msgReceived.strMessage;
msgToSend.cmdCommand = msgReceived.cmdCommand;
msgToSend.strName = clientI.strName;
message = msgToSend.ToByte();
//Enviar a posição ao client 2 depois clienmt 2 ve se acerta se ss message = Acertou!
serverSocket.BeginSendTo(message, 0, message.Length, SocketFlags.None, clientI.endpoint,
new AsyncCallback(OnSend), clientI.endpoint);
}
}
}
//Se o utilizador saiu, não é necessário continuar a aguardar dados
if (msgReceived.cmdCommand != Command.Logout)
{
//Aguardar dados do cliente
serverSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref epSender,
new AsyncCallback(OnReceive), epSender);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Servidor", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}