Exemple #1
0
 public string JoinSpreadGroup()
 {
     _spreadGroup = new SpreadGroup();
     _spreadGroup.Join(_spreadConnection, _configurationManager.SpreadGroup);
     return(_spreadGroup.ToString());
 }
Exemple #2
0
        private void _spreadConnection_OnMembershipMessage(SpreadMessage msg)
        {
            MembershipInfo info  = msg.MembershipInfo;
            SpreadGroup    group = info.Group;

            if (info.IsRegularMembership)
            {
                SpreadGroup[] members = info.Members;
                Console.WriteLine($"Regular membership for {group.ToString()} with {members.Length} members:");
                for (int i = 0; i < members.Length; i++)
                {
                    Console.WriteLine($"\t {members[i]}");
                }

                Console.WriteLine($"GroupID: {info.GroupID}");
            }

            SpreadGroup Sender;

            if (info.IsCausedByDisconnect)
            {
                Sender = info.Disconnected;
                Console.WriteLine($"{Sender} has disconnected ...");
                isDisconnected = true;
                _delegate      = new InformClientOfChange(NotifyClient);
                _delegate.Invoke(ServerOptions.IPAddress, ServerOptions.Port);
            }
            if (info.IsCausedByLeave)
            {
                Sender = info.Left;
                Console.WriteLine($"{Sender} has left ...");
                isDisconnected = true;
                _delegate      = new InformClientOfChange(NotifyClient);
                _delegate.Invoke(ServerOptions.IPAddress, ServerOptions.Port);
            }
            if (info.IsCausedByJoin)
            {
                Sender = info.Joined;
                Console.WriteLine($"{Sender} has joined ...");

                if (isInitState)
                {
                    #region Set Primary
                    Console.WriteLine("Setting Primary Server ...");

                    int highestPort = _configurationManager.ServerGroups.ToList().Max();

                    if (ServerOptions.Port.Equals(highestPort))
                    {
                        ServerOptions.IsPrimary = true;
                        Console.WriteLine("I am the primary server ...");
                    }
                    else
                    {
                        ServerOptions.IsPrimary = false;
                        Console.WriteLine("I am the backup server ...");
                    }
                    #endregion
                }
                else
                {
                    //receive full state
                }

                //_delegate = new InformClientOfChange(NotifyClient);
                //_delegate.Invoke(ServerOptions.IPAddress, ServerOptions.Port);
            }
        }