public NodeInfo AddOrUpdate(ApiNodeManagerModel.NodeInfo info) { lock (locker) { if (Nodes.Any(i => i.id == info.id)) { var _node = Nodes.Where(i => i.id == info.id).First(); if (_node.actionTask.Count == 0) { _node.state = info.state; } _node.ip = info.ip; _node.location = info.location; _node.name = info.name; _node.port = info.port; _node.lastHBDate = DateTime.Now; return(_node); } else { var _node = new NodeInfo(); _node.ip = info.ip; _node.location = info.location; _node.name = info.name; _node.port = info.port; _node.state = info.state; _node.id = info.id; _node.lastHBDate = DateTime.Now; Nodes.Add(_node); return(_node); } } }
public IActionResult ReceiveNodeInfo([FromBody] ApiNodeManagerModel.NodeInfo info) { var node = NodePool.Get().AddOrUpdate(info); int interval = Convert.ToInt32(this.config.GetSection("MainConfig").GetValue <string>("HeartInterval")); var next_beat = DateTime.Now.AddSeconds(interval); object result = null; if (node.actionTask.Count > 0) { result = new { next = next_beat, action = node.actionTask.Dequeue() }; } else { result = new { next = next_beat, action = "" }; } return(ApiResult.OK(result)); }