public static void Init()
        {
            AllianceManager.m_alliances = new Dictionary <long, Alliance>();
            AllianceManager.m_counters  = ServerStream.AllianceDatabase.GetDocumentHigherIDs();

            for (int i = 0; i < EnvironmentSettings.HigherIdCounterSize; i++)
            {
                int highId   = i;
                int higherId = 0;

                Parallel.For(1, AllianceManager.m_counters[i] + 1, lowId =>
                {
                    LogicLong id = new LogicLong(highId, lowId);

                    if (ServerManager.GetDocumentSocket(ServerCore.Type, id) == ServerCore.Socket)
                    {
                        IOperationResult <string> document = ServerStream.AllianceDatabase.Get(id).Result;

                        if (document.Success)
                        {
                            lock (AllianceManager.m_alliances)
                            {
                                Alliance allianceDocument = CouchbaseDocument.Load <Alliance>(document.Value);
                                AllianceManager.m_alliances.Add(id, allianceDocument);

                                if (higherId < lowId)
                                {
                                    higherId = lowId;
                                }
                            }
                        }
                    }
                });

                AllianceManager.m_counters[i] = higherId;
            }
        }
 public static void Save(Alliance alliance)
 {
     ServerStream.AllianceDatabase.InsertOrUpdate(alliance.Id, CouchbaseDocument.Save(alliance));
 }
 public static bool TryGet(LogicLong id, out Alliance alliance)
 {
     return(AllianceManager.m_alliances.TryGetValue(id, out alliance));
 }