kebab-shop

Larry Watterson

Üye
Üye
Mesaj
38
Çözümler
1
Beğeni
99
Puan
679
Ticaret Puanı
0
Yüzeysel olarak kafada oturttuğum bir "offline shop" sisteminin diyagramı, aklınıza gelen feature varsa belirtebilirsiniz.

Şimdi baktığımız zaman(@pasha37 de açtığım konuda yorum atarak fikir verdi sağ olsun) veyahut benim uğraştığım zamanlarda da olan sorun, çok gelmiştir bu soru ki eminim hala soran vardır; "hangi shopu kullanıcaz?", geliştirici bir shop geliştirir leş yiyiciler warez olsun diye bekler, bir kısım ciddi miktarlar öder, sonra forumlarda warez olunca üzerine konular açılır, bu shopu ekleyip files satanlar ortaya çıkar bla bla bla. Amaç bu sorunu Türkler olarak çözmek(bu benim vizyonum tabii, herkes farklı anlam yükleyebilir.).

Çok kapsamlı olduğunu, uzun ve ciddi bir süreç olduğunu biliyorum, şayet bunu tamamlarsam(veya tamamlarsak) benim için jubile olur(zaten amacımda bu, Metin2 benim için artık bir şey ifade etmiyor, arkada değerli bir iş bırakıp hayatımdan çıkarmak istiyorum, sonrasında sadece shopa bakım süreci devam edebilir). Ardında bir şeyler bırakmanın, insan kazanmanın paradan daha önemli olduğu düşüncesindeyim. Sistem kullanımı için min. bir miktar bağış belirleme niyetindeyim(LÖSEV, ahbap, TSKGV vb.). Tabii bu shop kullanılır kullanılmaz o ayrı bir mevzu onu ayrı tartışırız olgunlaşırsa.

Globalde kullanılabileceğini düşündüğüm bir sistem, tabii boş işler, uğraşmaya değmez vb. yorumları olanlarda olabilir, saygı duyarız. Eğer bu forum altında geliştirilecekse yönetimin(şahsıma hiçbir beklentim yok, örneğin ekip olursa contributor arkadaşlara jest amaçlı dev tagı bile vermeleri bile motive edicidir [ bu sadece ben yönetici olsam teşvik amaçlı yapacağım bir örnek, yönetimi zan altında bırakmak istemem sadece örnek elbette zorunda değiller, bence kimse de böyle bir şey beklememeli] ) ve yorumlarda yardıran üstün yazılımcı yeteneğine sahip olan arkadaşların destek olmasını beklerim, tabii onlara kalmış kimse vaktini harcamak zorunda değil.

Not: Webci bir contributor bulunmazsa yapay zeka desteğiyle kendim geliştirmeye çalışacağım c#, go vb. bir dil ile ama bu son çare, "marketplace" bir web servisi için yapay zekaya güvenmeyi mantıklı bulmuyorum, gerçek kişiler tercihim.

"Sürekli "destek" diyorsun sonra ahkam kesiyorsun!" diyecekler için buradaki tek olay kod yazmak değil bir projenin başında R&D süreçlerinde özellikle geliştireceğiniz projeyi bilmeniz, tanımanız lazım. Güncel tarihte sorunlar neler(örn. bu iş için shopların kritik sorunları, oyuncu beklentisi, olası zorluklar vb.) gibi araştırmalar yapılmak zorunda, paldır küldür başlanmaz. Ben zaten çalışan biriyim keza herkesin bir özel hayatıda var tüm bu süreci baştan aşağı kendim yapmam ciddi zaman alır. Algoritmanı belirlersin, mimarini oturtursun, geçmiş çözümlere bakarsın, kendi çözümünü oluşturursun bla bla bla. Destekten kastım "bak şu sorunlar çıkıyor shoplarda, oyuncu şunu bekliyor, geçmişte şu sorunlar yaşandı, daha önce x yerinde çalıştım orda şöyle bir çözüm sunuluyordu" gibi şeyler "kardeş biri gelsin auction kodlasın ya" değil, kurulacak her cümle, verilen her bilgi destektir. Beni seversiniz sevmezsiniz o ayrı bir konu, benim hak eden herkese saygım var, iş ayrı bu konular ayrı şeyler.

Bir ekip oluşursa beklentim;
  • Python ile uğraşmayı seven UI işlerine bakacak birileri
  • Web tarafına bakacak birileri
  • Üst düzey olmasa da belli düzeyde C++ kullanabilenler/mantık yürütebilenler
  • Metin2 oynayıp piyasadaki olan ve olası sorunları bilenler
  • Oyuncu beklentilerini bilen server sahipleri

Aşağıdaki liste yüzeysel, tamamen detaylar belirlenip, text'e ve diyagramalara dökülmeden kodlamaya başlama niyetim yok, burda da tabii bir arkadaş gerekiyor kendi iş ve özel hayatımdan bunları 1 haftada çıkarıp başlamak mümkün değil. Gerekli destek bulunmazsa konuda istenen farklı sistemlerden birini kodlayıp paylaşacağım sözümü tutmak amaçlı.

Genel bilgiler
  • Shop Server: Unix Domain Sockets (UDS) üzerinden IPC iletişimi
  • Veri Doğrulama: Klasik checksum, imza doğrulamaları vs.
  • Oturum: Session kontrolü ve Token doğrulama
  • Koruma: Kullanıcı bazlı Rate Limit ve Tier (yetki) kontrol sistemi.
  • Signature: Giden paketlerin imzalanması ve hata durumları için özel Error Packet yapısı.
  • Monitoring & logging: Klasik audit loglar, sistem logları vs.
Basic fonksiyonlar
  • Market Fonksiyonları: Shop info, shop görüntüleme, eşya arama, ekleme silme, ortalama fiyat (avg price) takibi vb. klasik shop gereksinimleri
  • Banka Sistemi: Bankadan para çekme ve "Return All" ile tüm eşyaları geri alma.

Açık Artırma (Auction) Sistemi
  • Escrow (Emanet) Sistemi: Teklif sırasında paranın rezerve edilmesi ve üst teklif gelince eski teklifin otomatik iadesi.
  • Müzayede Yönetimi: Açık artırma başlatma, iptal etme ve bitişte otomatik eşya/para transferi.
  • Otomatik İşleyici: Background thread (Expiry Worker) ile süresi dolan ilanların ve açık artırmaların otomatik sonlandırılması gibi işlemler

Borsa (Order Book) Sistemi
  • Limit Order: Kullanıcının belirlediği fiyattan alım (Bid) veya satım (Ask) emri girebilmesi.
  • Order Book (Emir Defteri): Alım/satım emirleri listesi
  • Matching Engine: Yeni bir emir geldiğinde defteri tarayıp uygun fiyatlı karşı emirle anında eşleştirme yapan motor.
  • Escrow: Alım emrinde paranın, satım emrinde eşyanın işlem gerçekleşene kadar sistem tarafından bloke edilmesi.
  • Offline Trading: Online olma gereksinimi yok
  • Dinamik Fiyat Takibi: Eşyaların anlık taban ve tavan fiyatlarının defter üzerinden izlenebilmesi.
  • Event-Based Bildirim: İşlem gerçekleştiğinde Event Bus üzerinden Web, Discord ve Telegram kanallarına anlık veri gönderimi.

Bildirim ve Entegrasyon
  • Event Bus: Klasik thread-safe queue
  • Anlık Bildirimler: Web tarafı için(marketplace) WebSocket push desteği
  • Bot Entegrasyonu: Discord ve/veya Telegram botları için bildirim yapısı

Web Entegrasyonu:
  • Satış: Oyuncular para elde etmek için shopundaki itemleri gerçek para karşılığında satabilecek
  • İletişim: Tabii bu "Shop Server" ile entegre şekilde çalışacak
  • Marketplace dışında bir admin dashboard panelde sunulabilir.

Not: Bu diyagramlar sadece yüzeyseldir (monitoring, fail-safe, concurrency vb. durumlar yok, ileride UML ile çizececeğim oturdukça, zaten her projede tasarım en az 10 kez değişir) ve hedeflenen mimari ve feature listdir, geliştirme aşamasında mimari zorluk, trade-off vb. durumlardan dolayı değişebilir(Örn. redis'ten vazgeçilebilir, farklı bir mekanizma kullanılır yerine, websocket değilde rpc + pub/sub tercih edilir, IPC metodu değişebilir vs.). Şu an fikir ve mimari aşaması, tam oturmuş halde değil.

Sanıyorum ki bunu konu altından konuşabiliriz veyahut bana dc'den falan yazabilirsiniz.


server-diagram.webp

order-book-diagram.webp
 
Multiprice de güzel gider bence onuda ekle Mustafa hocam
 
Herkesin "geliştirici" olduğu bir ortamda en azından bir kaç kişiden mesaj beklerdim, açıkçası umduğum gibi bir çıktı olmadı, neyse önemsiz.
Bana tek mesaj atan @MCB oldu, ismini izin almadan veriyorum umarım sorun değildir, kendisine burdan teşekkür ediyorum.

Şu an IPC üzerinde çalışıyorum, diyagram ve koddan bir örnek ekte belirtildi.

Detaylar:
* Araştırmalarımdan elde ettiğim kadarıyla "flatbuffers" oyunlarda sıkça kullanılıyor, bu sebeple "game(bu mimaride client oluyor)" ile serializer olarak bu kütüphaneyi kullanacağım. Açıkçası ticari bir kodladığım IPC Cap'n tabanlıydı, ilk niyetim Cap'n kullanmaktı ama orda durumlar farklı, Genel olarak hikayeleri aynı "zero-copy" ve protobuf'dan çok daha hızlı olmaları. Farkları flatbuffer'ın "offset-based" bir logice dayanırken Cap'n Proto'nun logici "pointer" mantığında (merak ediyorsanız açıp okuyabilirsiniz, çok teknik detaya girmeyeyim)
* IPC için UDS tercih ettim(tabii mimari modüler olduğu için basitçe değiştirilebilir), sebebi asenkron network iletişimi ve boost kütüphanesini kullanmaktan haz alıyor olmam, ZMQ'yu codebase olarak pek beğenmiyorum.
* Şimdilik direkt "game" ile değil Python ile kodladığım bir client ile haberleşiyor, test aşaması tabii klasik şeyler.
* Bu base-logic, burada heartbeat eklenmesi gerekiyor en basitinden akla gelen, boş vakit buldukça ilgileneceğim.
* Şimdilik olgunlaşmış bir şey yok sadece "olursa" diye altyapısıyla uğraşıyorum.
* Kodun verbose olmasına bakmayın pseudocode.

İşinize yarar mı bilmem (Metin2 için), IPC'yi bir kütüphane haline getirip paylaşabilirim duruma göre.

uds-chart.png eklentisini görüntüle
1774904238040.webp

1774902179518.webp
 
herşey çok güzel, tüm fikirler iyi ama verilen kararın offlineshop olması? Biraz şüpheli bu kadar emeğin, jubilenin iz bırakması lazım shop ile bu çok zor mevcut shoplar guvenlik-islevsellik adına herkesin aşağı yukarı işini görüyor ekstrasını isteyende bir şekilde yapıyor.... Başarılar...
 
herşey çok güzel, tüm fikirler iyi ama verilen kararın offlineshop olması? Biraz şüpheli bu kadar emeğin, jubilenin iz bırakması lazım shop ile bu çok zor mevcut shoplar guvenlik-islevsellik adına herkesin aşağı yukarı işini görüyor ekstrasını isteyende bir şekilde yapıyor.... Başarılar...
Selamlar,

Aslında henüz karar verdiğim bir şey yok kimseden ses çıkmadığı için sadece IPC üzerinde çalıştım, derseniz ki "Metin2'yi server side sıfırdan yazalım", oyun programlama ile ilgili güzel bir kaç kitap okuyup yapmaya ben okeyim benim için sorun yok. Güzel dileğiniz için teşekkürler, fikriniz varsa zevkle okurum...
 
Selamlar,

Aslında henüz karar verdiğim bir şey yok kimseden ses çıkmadığı için sadece IPC üzerinde çalıştım, derseniz ki "Metin2'yi server side sıfırdan yazalım", oyun programlama ile ilgili güzel bir kaç kitap okuyup yapmaya ben okeyim benim için sorun yok. Güzel dileğiniz için teşekkürler, fikriniz varsa zevkle okurum...
Tekrar konuya dahil oluyorum çok kusura bakma Mustafa hocam.

Öncelikle piyasada sürekli bir offlineshop sıkıntısı var fakat arkadaşımızın dediği gibi herkes bir şekilde bunu telafi edebiliyor.Benim aklımda ki düşünce piyasadaki shoplardan farklı olup neler katabileceğiniz.

Mesela;

Shop sahibi bir player sohbet satırında pazarını yansıtabilmeli ve yansıtılan pazara anında ışınlanabilmeli vede sohbet kısmından yansıtılan ürünü bir buton sayesinde anında satabilmeli.(1-99'a gider diye düşünüyorum)


Önceki yorumumda belirttiğim ve yıllardır kimsenin yapamadığı bir multiprice sistemi offlineshop

Oyunun web sitelerinde nekadar pazar olduğu ve bu pazarların içeriği görüntülenebilmeli hem kendi oyuncunun hemde başka oyuncularının.

Dahada aklıma geldikçe buradan devam ederim herkese hayırlı forumlar diliyorum.
 
Tekrar konuya dahil oluyorum çok kusura bakma Mustafa hocam.

Öncelikle piyasada sürekli bir offlineshop sıkıntısı var fakat arkadaşımızın dediği gibi herkes bir şekilde bunu telafi edebiliyor.Benim aklımda ki düşünce piyasadaki shoplardan farklı olup neler katabileceğiniz.

Mesela;

Shop sahibi bir player sohbet satırında pazarını yansıtabilmeli ve yansıtılan pazara anında ışınlanabilmeli vede sohbet kısmından yansıtılan ürünü bir buton sayesinde anında satabilmeli.(1-99'a gider diye düşünüyorum)


Önceki yorumumda belirttiğim ve yıllardır kimsenin yapamadığı bir multiprice sistemi offlineshop

Oyunun web sitelerinde nekadar pazar olduğu ve bu pazarların içeriği görüntülenebilmeli hem kendi oyuncunun hemde başka oyuncularının.

Dahada aklıma geldikçe buradan devam ederim herkese hayırlı forumlar diliyorum.
est. niye kusura bakayım,
ilerlerse mutlaka bir discord kurarım, olası senaryoda orada da fikirlerini paylaşırsan çok sevinirim, sevgiler..
 
Şimdiden başarılar dilerim projeyi takipteyim, kendi projelerimden kalan vakitlerimde github üzerinden olsun burdan olsun elimden geldiğince katkı sağlamaya çalışacağım.
 
Geri
Üst