Example #1
0
 private void InitializeHA()
 {
     HAContext.LoadConfiguration(this.logManager);
     if (HAContext.Enable)
     {
         HAContext.LoadIdentifier(this.logManager);
         HAContext.LoadMasterKey(this.logManager);
         //HAContext.LoadVip();
         HAContext.PrintLog(this.LogManager.Message);
     }
 }
Example #2
0
        private void ChangeToMaster()
        {
            var action = this.ToMaster;

            if (action != null)
            {
                action(this, EventArgs.Empty);
            }

            //broadcast master key
            //if (HAContext.StoreEnable)
            //{
            //    HAContext.MasterKey = Guid.NewGuid().ToString("N");
            //    HAContext.SaveMasterKey(HAContext.MasterKey);
            //}

            var mk = Guid.NewGuid().ToString("N");

            HAContext.SaveMasterKey(mk);
        }
Example #3
0
        private void WebSocketNewMessage(HttpServerWebSocketContext context, WebSocketMessageEventArgs args)
        {
            var state = context.UserState as ConnectionState;

            if (state == null)
            {
                return;
            }

            if (args.Opcode == WebSocketOpcode.Text)
            {
                var messageItems = args.Message.Split(':');
                if (messageItems[0] == "elect" && messageItems.Length == 3)
                {
                    //req ,    elect:xxxxx:masterkey
                    //resp,    elect:xxxxx:num
                    var num = HAContext.GetMasterNum();
                    if (num == 0)
                    {
                        var masterKey   = messageItems[2];
                        var disabledNum = 0;
                        if (state.num == 1 && HAContext.MasterKey != masterKey)
                        {
                            disabledNum = 1;
                        }
                        else if (state.num == 2 && HAContext.MasterKey != masterKey)
                        {
                            disabledNum = 2;
                        }
                        //
                        num = HAContext.Elect(disabledNum);
                    }
                    //
                    if (num == 1 || num == 2 || num == 3)
                    {
                        this.logManager.Message.WriteTimeLine("HAServer response elect node " + num + " to " + state.ip);

                        try
                        {
                            context.SendAsync("elect:" + messageItems[1] + ":" + num, null);
                        }
                        catch (System.IO.IOException) { }
                        catch (System.Net.Sockets.SocketException) { }
                        catch (System.Exception)
                        {
                        }
                    }
                    //else
                    //{
                    //    //discard message
                    //}
                }
                else if (messageItems[0] == "readmasterkey")
                {
                    this.logManager.Message.WriteTimeLine("HAServer send master key " + HAContext.MasterKey + " to " + state.ip);
                    //
                    try
                    {
                        context.SendAsync("masterkey:" + HAContext.MasterKey, null);
                    }
                    catch (System.IO.IOException) { }
                    catch (System.Net.Sockets.SocketException) { }
                    catch (System.Exception)
                    {
                    }
                }
            }
        }
Example #4
0
        private void ClientOnMessage(object sender, WebSocketMessageEventArgs e)
        {
            var client = (WebSocketClient)sender;
            var num    = (int)client.UserState;

            //
            if (e.Opcode == WebSocketOpcode.Text)
            {
                var messageItems = e.Message.Split(':');
                if (messageItems[0] == "elect")
                {
                    //req ,    elect:xxxxx:masterkey
                    //resp,    elect:xxxxx:num
                    var electNum = 0;
                    if (messageItems.Length == 3 && messageItems[1] == this.electIdentity && int.TryParse(messageItems[2], out electNum))
                    {
                        lock (this.electLock)
                        {
                            if (electNum == 1)
                            {
                                this.logManager.Message.WriteTimeLine("HAClient request ack node 1 from node {0}", client.UserState);
                                this.elect1++;
                            }
                            else if (electNum == 2)
                            {
                                this.logManager.Message.WriteTimeLine("HAClient request ack node 2 from node {0}", client.UserState);
                                this.elect2++;
                            }
                            else if (electNum == 3)
                            {
                                this.logManager.Message.WriteTimeLine("HAClient request ack node 3 from node {0}", client.UserState);
                                this.elect3++;
                            }
                            //
                            var count = 0;
                            count += HAContext.Connectioned1 ? 1 : 0;
                            count += HAContext.Connectioned2 ? 1 : 0;
                            count += HAContext.Connectioned3 ? 1 : 0;
                            //, ignore num 3
                            if (this.elect1 == 2)
                            {
                                this.taskQueue.Add("elected:1");
                            }
                            else if (this.elect2 == 2)
                            {
                                this.taskQueue.Add("elected:2");
                            }
                            else if (this.elect3 == 2)
                            {
                                this.taskQueue.Add("elected:3");
                            }
                        }
                    }
                }
                else if (messageItems[0] == "masterkey" && messageItems.Length == 2)
                {
                    HAContext.SaveMasterKey(messageItems[1]);
                    this.logManager.Message.WriteTimeLine("HAClient receive masterkey " + messageItems[1] + " from node " + num);
                    this.readMasterKey = false;
                }
            }
        }