Savaşan 22 Yarışmasının sisteminde mesajları yönlendirmek ve sistem durumunu tutmaktan sorumlu Yönetici servis
Bu program, farklı gRPC bağlantıları açarak diğer servislerle konuşabilecektir. Resimdeki iki taraflı yayınlama (bidirectional streaming) ile bağlantılar açık tutulacaktır.
Mastermind, yönetici servis olup diyagramdaki diğer servislerle haberleşecektir.
Bağlı olan servislerin sistemin hangi aşamada olduğundan haberdar olabilmeleri için, Mastermind bütün servislerle bu sistem durumu paylaşmak zorunda. Sistemi bir sonlu durum makinesi (finite-state machine) olarak modelleyerek, belirli kurallara göre hangi aşamada olması gerektiğini hesaplayıp, X geçiş fonksiyonu için Y durumuna geçileceğini elde edilebilir. 2022 Savaşan İHA Yarışması'nın isterlerini yerine getirmek için kullanılacak sistem durumları ve geçiş fonksiyonları aşağıdaki durum diyagramında gösterilir:
UpdateState bi-directional RPC üzerinden istemci servislerden durum geçişleri alırken, onlara yeni hesaplanan durumu da gönderecektir. Unary yerine bi-directional olmasının nedeni, durum güncellemesinin sadece gönderen servis değil, diğer servislerden de kaynaklı olabilmesinden dolayıdır.
Örnek olarak 4 servisin bağlı olduğu bir sistemde, Servis A bir UpdateStateRequest'ı gönderdiği zaman, Servis A, Servis B, ve Servis C'ye yeni durumu içeren bir UpdateStateResponse gönderilecek.
git clone https://github.com/koustech/mastermind.git
cd mastermind
go run main/main.go -a 127.0.0.1:5678