Ejemplo n.º 1
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);
        }
Ejemplo n.º 2
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;
                }
            }
        }