Mercurial > hg > Database > Christie-sharp
view codegear/CodeGearManager.cs @ 33:7575980bffc9
update
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 20 Apr 2021 18:42:17 +0900 |
parents | 84e0b85af821 |
children |
line wrap: on
line source
using System; using System.Collections.Concurrent; using System.Threading; using Christie_net.daemon; using Christie_net.datagear; using Christie_net.datagear.command; namespace Christie_net.codegear { public class CodeGearManager { private ConcurrentDictionary<string, DataGearManager> dgmList = new ConcurrentDictionary<string, DataGearManager>(); private ConcurrentDictionary<int, CodeGearManager> cgmList; private ThreadPoolExecutors threadPoolExecutors; private LocalDataGearManager localDgm = new LocalDataGearManager(); private ConcurrentDictionary<string, IncomingTcpConnection> acceptHash = new ConcurrentDictionary<string, IncomingTcpConnection>(); public int cgmID; public ChristieDaemon daemon; public int localPort; public CodeGearManager(int cgmID, ThreadPoolExecutors exe, ConcurrentDictionary<int, CodeGearManager> cgmList, int localPort) { this.dgmList.TryAdd("local", localDgm); this.cgmList = cgmList; this.threadPoolExecutors = exe; this.cgmID = cgmID; this.localPort = localPort; this.daemon = new ChristieDaemon(localPort, this); this.daemon.Listen(); } public LocalDataGearManager GetLocalDGM() { return localDgm; } public DataGearManager GetDGM(string dgmName) { if (dgmList.ContainsKey(dgmName)) { return dgmList[dgmName]; } else { throw new ArgumentNullException("DGM " + dgmName + " is not found"); } } public RemoteDataGearManager CreateRemoteDGM(string dgmName, string address, int port) { RemoteDataGearManager remote = new RemoteDataGearManager(dgmName ,address, port, this); dgmList.TryAdd(dgmName, remote); return remote; } public void Submit(CodeGear cg) { threadPoolExecutors.Execute(cg.GetCge()); } public void Setup(CodeGear cg, int priority = 5) { cg.Setup(this, priority); } public ConcurrentDictionary<int, CodeGearManager> GetCgmList() { return cgmList; } public ConcurrentDictionary<string, DataGearManager> GetDgmList() { return dgmList; } public bool ContainsDgm(string dgmName) { return dgmList.ContainsKey(dgmName); } public void SetAccept(string key, IncomingTcpConnection incoming) { acceptHash.TryAdd(key, incoming); } // broadcast data public void PutAllDgm(string key, Object data) { foreach (var dgm in dgmList.Values) { dgm.Put(key, data); } } } }