private static void ReceiveCallback(IAsyncResult ar) { Player currentPlayer = (Player)ar.AsyncState; int receivedBytesLength = 0; try { receivedBytesLength = currentPlayer.Connection.ClientSocket.EndReceive(ar); } catch (Exception) { Logger.LogError(string.Format("{0} ID'li oyuncunun istemcisi zorla kapatıldı!", currentPlayer.PlayerID)); //Çıkan oyuncuyu, oyuncu listesinden siliyoruz. PlayerManager.RemovePlayer(currentPlayer); return; } if (receivedBytesLength <= 0) { AllUtils.Disconnect(currentPlayer, false); } else { string receivedText = Encoding.Default.GetString(currentPlayer.Connection.ReceiveByteBuffer, 0, receivedBytesLength); Logger.LogInfo(string.Format("[RECEIVE] Alınan veri: [{0}], Uzunluk: [{1}], Player ID: [{2}]", receivedText, receivedBytesLength, currentPlayer.PlayerID)); //Gelen datayı işlenmesi için ilgili methoda yönlendiriyoruz. DataHandler.HandleReceivedData(currentPlayer, receivedText); } //Tekrar dinleyerek sonsuz bir döngü oluşturuyoruz. Receive(currentPlayer); }
/// <summary> /// Sunucuyla bağlantı kuran istemcinin bize ait olup olmadığını teyit eder. /// </summary> /// <param name="playerObject">Teyidi yapılacak olan objedir.</param> public static async void ValidatePlayer(Player playerObject) { await Task.Delay(1000); if (playerObject.IsValidated == false) { AllUtils.Disconnect(playerObject, true); } }
public static void HandleReceivedData(Player playerObject, string receivedData) { //Gelen verileri bölüyoruz. string[] splittedData = receivedData.Split('\t'); //Bölünmüş verinin ilk kısmı opcode'u temsil eder. ushort'a çevirmeye çalışıyoruz. ushort clientOpcode = ushort.TryParse(splittedData[0], out clientOpcode) ? clientOpcode : (ushort)0; //Opcode 0'a eşitse yanlışlık var demektir. İstemci uzaklaştırılıyor. if (clientOpcode == 0) { AllUtils.Disconnect(playerObject, true); return; } switch (clientOpcode) { case (ushort)Opcode.EXIT_APP: Logger.LogWarning(string.Format("{0} ID'li oyuncu, çıkış yapmayı talep etti...", playerObject.PlayerID)); AllUtils.Disconnect(playerObject, false); break; case (ushort)Opcode.ROOM_CODE: playerObject.IsValidated = true; //Oyuncuya, kendi player id'sini gönderiyoruz. Sender.Send(string.Format("{0}\t{1}", (ushort)Opcode.PLAYER_ID, playerObject.PlayerID), playerObject); Logger.LogWarning(string.Format("{0} ID'li oyuncu, oda oluşturma talebi gönderdi...", playerObject.PlayerID)); Room roomObject1 = RoomManager.CreateRoom(); Sender.Send(string.Format("{0}\t{1}", (int)Opcode.ROOM_CODE, roomObject1.RoomID), playerObject); Logger.LogWarning(string.Format("{0} ID'li oyuncu için bir oda oluşturuldu. Oda ID: {1}", playerObject.PlayerID, roomObject1.RoomID)); break; case (ushort)Opcode.JOIN_ROOM: Logger.LogWarning(string.Format("{0} ID'li oyuncu, {1} ID'li odaya girmeyi talep etti...", playerObject.PlayerID, splittedData[1])); PlayerManager.JoinRoom(playerObject, splittedData[1]); break; case (ushort)Opcode.ATTACK_REQUEST: GameManager.SetPlayerAttack(playerObject, splittedData[1]); break; default: Logger.LogError(string.Format("Opcode bulunamadı: {0}, Oyuncu: {1}", clientOpcode, playerObject.PlayerID)); AllUtils.Disconnect(playerObject, true); break; } }