private void AddService(IChannel channel, Services services, int id, JArray address, int port)
{
var service = services.JoinService(channel, id, address, port);
if (id == -1)
{
dynamic packet = new JObject();
packet.type = "max_entity_id";
packet.value = 10000;
channel.SendMessage(packet);
var networks = _networkManager.GetNetworks(service);
int notifyServiceCount = 0;
foreach (var network in networks)
{
var remoteServiceName = network.Service1 == services.GetServicesName() ? network.Service2 : network.Service1;
var remoteService = GetServices(remoteServiceName);
if (remoteService == null)
continue;
notifyServiceCount += remoteService.NotifyJoinService(service, network);
}
//Interlocked.Increment
//여기서 광역 락 시전!
//추가 됬다고 정보를 알린 모든 서비스에서 승인이 떨어지면 다음꺼 처리.
if (notifyServiceCount > 0)
{
_addremoveService = service;
_notifyServiceCount = notifyServiceCount;
_nextAddRemoveProcessing = new AutoResetEvent(false);
_nextAddRemoveProcessing.WaitOne();
}
}
}