Unity ve C# işlem kodlarıyla veri tabanı işlemlerini nasıl yönetilir?

Mustafa Eroğlu

Kilopat
Katılım
15 Kasım 2015
Mesajlar
218
Çözümler
3
Daha fazla  
Cinsiyet
Erkek
Merhaba,

Ben unity ile oyun geliştirmeye çalışıyorum ve veritabanına unity ile bağlanmanın yani oyun dosyalarının içerisinde SQL bağlantı satırlarının yazmasının güvenli olmadığını düşünüyorum. Bunun için sunucuda çalışan "GameServerManager " belirlenmiş opcode (işlem kodu) ile oyundan gelen opcode ve parametreleri veritabanına işleyecek. Mesela karakter hareket ettiğinde kordinant bilgileri direkt veritabanına değil Game Server Manager'a ulaşacak ve o da veritabanına işleyecek.

Opcode ile ilgili internette böyle bir örnek buldum.

C#:
INSERT INTO [SHARD_DATABASE].[dbo].[_ExeGameServer]
(
    Action_ID,
    CharName16,
    Param02, -- Region Id
    Param03, -- PosX
    Param04, -- PosY
    Param05 -- PosZ
)
VALUES
(
    4,
    'Test123',
    22103,
    1918,89893,
    17,3228645,
    1424,07336
);

[CODE lang="c" title="GameServerManager"]bool MoveTo(uint32_t GameWorldId, uint16_t RegionId, float PosX, float PosY, float PosZ);
bool MoveTo(uint16_t RegionId, float PosX, float PosY, float PosZ);
bool MoveTo(const uint32_t GameWorldId, CPosition Position, int32_t Type);

// Read params
SQLUSMALLINT cParam02, cParam03, cParam04;
SQLSMALLINT cParam05;
if (m_dbLink.sqlCmd.GetData(5, SQL_C_USHORT, &cParam02, 0, NULL)
&& m_dbLink.sqlCmd.GetData(6, SQL_C_USHORT, &cParam03, 0, NULL)
&& m_dbLink.sqlCmd.GetData(7, SQL_C_SHORT, &cParam04, 0, NULL)
&& m_dbLink.sqlCmd.GetData(8, SQL_C_USHORT, &cParam05, 0, NULL))
{
// Check player existence
CGObjPC* player = CGObjManager::GetObjPCByCharName16(cCharName);
if (player)
{
if(!player->MoveTo(cParam02, cParam03, cParam04, cParam05))
actionResult = FETCH_ACTION_STATE::FUNCTION_ERROR;
}
else
actionResult = FETCH_ACTION_STATE::CHARNAME_NOT_FOUND;
}
else
actionResult = FETCH_ACTION_STATE::pARAMS_NOT_SUPPLIED;[/CODE]

Unity ile ilgili bilgiler Unity Documentation adresinde bulunuyor fakat ben bu konuyla alakalı bir konu bulamadım. Bu konuda nasıl bir yol izlemem gerekir? Yardımlarınız için şimdiden teşekkürler.
 
Son düzenleyen: Moderatör:
Online oyunlarda öyle bir düzenek zaten kullanılmıyor. Veritabanına sadece server erişir, clientler servere bağlanır. Eğer veritabanına bir veri kaydedilecekse bunu serverin sağladığı API arayüzüyle yapılır. Örneğin;

C++:
//players
client.konum_send("server_ip","command_name","player_username, coordinat_data_x_y_z");

//server
server.comman_receiver_loop(received)
{

    if received.command_name = "save"
    {
        database.save(received.player_username, received.coordinat_data_x_y_z)
    }

}
 
Son düzenleme:
Online oyunlarda öyle bir düzenek zaten kullanılmıyor. Veritabanına sadece server erişir, clientler servere bağlanır. Eğer veritabanına bir veri kaydedilecekse bunu serverin sağladığı API arayüzüyle yapılır. Örneğin;

C++:
//players
client.konum_send("server_ip","command_name","player_username, coordinat_data_x_y_z");

//server
server.comman_receiver_loop(received)
{

    if received.command_name = "save"
    {
        database.save(received.player_username, received.coordinat_data_x_y_z)
    }

}
Unity ile 192.168.1.2:32000 IP adresinin portuna nasıl parametre gönderebilirim ve sunucuda GameServerManager ile 32000 portundan gelen parametreleri nasıl kullanabilirim? Github vb kaynaklardan kaynak kodları olan bir proje örneği verebilir misiniz?
 
Business ve veri tabanı kodları asla client tarafında yapılmaz. Daha doğrusu yapılmamalı.
Tcp / Udp kullanacaksın. Eğer socket programlama ve az çok network bilgin yoksa bilgilerini tazelesen iyi edersin.
Socket biliyorsan şu oynatma listesine bakabilirsin. Ben zamanında bakmıştım. Başlangıç için iyi.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
 
Business ve veri tabanı kodları asla client tarafında yapılmaz. Daha doğrusu yapılmamalı.
Tcp / Udp kullanacaksın. Eğer socket programlama ve az çok network bilgin yoksa bilgilerini tazelesen iyi edersin.
Socket biliyorsan şu oynatma listesine bakabilirsin. Ben zamanında bakmıştım. Başlangıç için iyi.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
C# ve Unity programlamayı daha yeni öğrenmeye başladım diyebilirim. Programlarken araştırmalar yaparak, örnek projeleri inceleyerek öğrenmesi daha kalıcı oluyor sanki.
 

Yeni konular

Geri
Yukarı