public override void Initialize() { IsHost = false; AquirePeerID: DateTime time = DateTime.Now; status = new PeerStatus() { ID = Core.user?.ID.ToString("00"), LastActivity = time }; exe = new ServerExecute { svr = this }; Response resp = client.Peer(status.ID, 0U, "add me"); if (resp.result == (byte)Response.Result.notfound) { (DBLive Live, DBPeople People, DBHistory History, DBSettings Settings, PeerStatus peer)tup = resp.obj; Live = tup.Live; People = tup.People; History = tup.History; Settings = tup.Settings; status.ID = tup.peer.ID; status.LastActivity = tup.peer.LastActivity; status.LastPoint = tup.peer.LastPoint; Log($"Using peer ID {status.ID}"); Log("Downloaded Peer Database"); } else if (resp.result == (byte)Response.Result.ok) { //Somene is using that PeerID Log($"Somene is using that PeerID. Changing..."); goto AquirePeerID; } else { Log($"Fatel error. Cannot Download Peer Databases. {resp.msg} \t {resp.expr}"); } timer = new System.Timers.Timer(3000); timer.Elapsed += Timer_Elapsed; timer.Start(); }
public void Peer() { Response resp = client.Peer(status.ID, status.LastPoint); if (resp.result == (byte)Response.Result.ok) { var pack = (PeerPackage)resp.obj; if (status.LastPoint == pack.Point) { return; } if (pack.requests == null) { Log("!!! Peer server recieved null request array"); return; } if (IsDebug) { Log($"Peered {pack.requests.Length} requests"); } foreach (var req in pack.requests) { Respond(req); if (IsDebug) { Log($"Peer {status.ID} : Processed {((Request.Command)req.command).ToString()} {req.db}.{req.expr} - {string.Join(" ", req.para)} ~ {VisualizeObj(req.para[0])}"); } } status.LastPoint = pack.Point; } else if (resp.result == (byte)Response.Result.notfound) { (DBLive Live, DBPeople People, DBHistory History, DBSettings Settings, PeerStatus peer)tup = resp.obj; Live = tup.Live; People = tup.People; History = tup.History; Settings = tup.Settings; status = tup.peer; Log("Downloaded Peer Database again. Looks like we were inactive for a while. Check your network connection"); } else { Log($"Fatel error. Cannot Peer. {resp.msg} \t {resp.expr}"); } }
public virtual Response RespondPeerReq(string PeerID, uint ReqPeerPoint, string expr) { PeerStatus peer; switch (expr) { case "add me": ExtendPeerID: LastPeerIndex++; PeerID = $"{PeerID}{LastPeerIndex}"; if (Peers.ContainsKey(PeerID)) { goto ExtendPeerID; } break; case "reload": if (Peers.TryGetValue(PeerID, out peer)) { peer.LastPoint = CurrentPeerPoint; return(new Response(Response.Result.ok, null, "reload", (Live, People, Settings))); } break; } while (PeeringBusy) { System.Threading.Thread.Sleep(10); } PeeringBusy = true; lock (Peers) { if (!Peers.TryGetValue(PeerID, out peer)) { //New peer peer = new PeerStatus() { ID = PeerID, LastActivity = DateTime.Now, LastPoint = CurrentPeerPoint }; Peers.Add(PeerID, peer); Log($"Added new peer {PeerID}"); PeeringBusy = false; return(new Response(Response.Result.notfound, null, "new peer", (Live, People, History, Settings, peer))); } peer.LastActivity = DateTime.Now; peer.LastPoint = ReqPeerPoint; int count = (int)(CurrentPeerPoint - peer.LastPoint); PeeringBusy = false; if (count == 0) { return(new Response(Response.Result.ok, null, null, new PeerPackage() { Point = CurrentPeerPoint })); } PeerPackage pack = new PeerPackage() { Point = CurrentPeerPoint, requests = new Request[count] }; Requests.CopyTo(pack.requests, (int)(peer.LastPoint - MinPeerPoint), count); Log($"Sent {count} requests to peer {PeerID} {{ {peer.LastPoint} to {CurrentPeerPoint} }} {VisualizeObj(pack.requests)}"); peer.LastPoint = CurrentPeerPoint; PeeringBusy = false; return(new Response(Response.Result.ok, null, null, pack)); } }