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); } }
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); }
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) { } } } }
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; } } }