Example #1
0
        public static async void StartServer()
        {
            if (Listening)
            {
                MessageBox.Show("Net client already started!"); return;
            }
            Listening = true;
            while (Listening)
            {
                Debugging.Log("Listening for data...");
                string Logic = await Task.Run(() => RecieveData());

                Debugging.Log(Logic);

                LogicObjects.MMRTpacket NetData = new LogicObjects.MMRTpacket();
                if (Logic != "")
                {
                    try
                    {
                        NetData = JsonConvert.DeserializeObject <LogicObjects.MMRTpacket>(Logic);
                        ManageNetData(NetData);
                        Debugging.Log($"Data Processed");
                    }
                    catch (Exception e) { Debugging.Log($"Data Invalid: {e}"); }
                }
            }
            Debugging.Log("Server Shutting Down");
            return;
        }
Example #2
0
 public static void OnlinePlay_TriggerAddRemoteToIPList(LogicObjects.MMRTpacket Data)
 {
     LogicObjects.IPDATA NewIP = new LogicObjects.IPDATA();
     try { NewIP.IP = IPAddress.Parse(Data.IPData.IP); } catch { return; }
     NewIP.PORT        = Data.IPData.PORT;
     NewIP.DisplayName = $"{NewIP.IP}:{NewIP.PORT}";
     IPS.Add(NewIP);
     if (CurrentOpenForm != null)
     {
         CurrentOpenForm.UpdateFormItems();
     }
 }
Example #3
0
 private static void SendRequestedUpdate(LogicObjects.MMRTpacket Data, bool IPInSendingList)
 {
     if (IPInSendingList)
     {
         try
         {
             IPAddress NIP = IPAddress.Parse(Data.IPData.IP);
             SendData(new List <LogicObjects.IPDATA> {
                 new LogicObjects.IPDATA {
                     IP = NIP, PORT = Data.IPData.PORT
                 }
             }, 0);
         }
         catch (Exception e) { Debugging.Log($"Could not send requested data\nReason: Send Request Errored with\n{e}"); }
     }
     else
     {
         Debugging.Log($"Could not send requested data\nReason: User not in send list {Data.IPData.IP}:{Data.IPData.PORT}");
     }
 }
Example #4
0
        //Sending Data

        public static LogicObjects.MMRTpacket CreateNetData(int Type)
        {
            bool isValidSyncable(LogicObjects.LogicEntry x)
            {
                if (x.IsFake)
                {
                    return(false);
                }
                if (!x.HasRandomItem(true))
                {
                    return(false);
                }
                return(true);
            }

            List <LogicObjects.NetData> NetData = new List <LogicObjects.NetData>();

            foreach (var i in LogicObjects.MainTrackerInstance.Logic.Where(x => isValidSyncable(x)))
            {
                if (LogicObjects.MainTrackerInstance.Options.IsMultiWorld && (!i.Checked || i.ItemBelongsToMe()))
                {
                    continue;
                }
                NetData.Add(new LogicObjects.NetData {
                    ID = i.ID, PI = i.PlayerData.ItemBelongedToPlayer, Ch = i.Checked, RI = i.RandomizedItem
                });
            }
            LogicObjects.MMRTpacket Pack = new LogicObjects.MMRTpacket
            {
                LogicData        = (Type == 1) ? new List <LogicObjects.NetData>() : NetData,
                PlayerID         = LogicObjects.MainTrackerInstance.Options.MyPlayerID,
                RequestingUpdate = Type,
                IPData           = new LogicObjects.IPDATASerializable
                {
                    IP   = MyIP.ToString(),
                    PORT = LogicObjects.MainTrackerInstance.Options.PortNumber
                }
            };
            return(Pack);
        }
Example #5
0
        public static void CleanMultiWorldData(LogicObjects.TrackerInstance Instance, LogicObjects.MMRTpacket Data)
        {
            foreach (var i in Instance.Logic.Where(x => x.Aquired && x.PlayerData.ItemCameFromPlayer == Data.PlayerID))
            {
                i.Aquired = false;
                i.PlayerData.ItemCameFromPlayer = -1;
            }

            var log          = LogicObjects.MainTrackerInstance.Logic;
            var itemsAquired = new List <LogicObjects.LogicEntry>();
            var itemsInUse   = new List <LogicObjects.LogicEntry>();

            foreach (var i in log)
            {
                if (i.IsFake)
                {
                    continue;
                }
                if (i.LogicItemAquired())
                {
                    itemsAquired.Add(i); itemsInUse.Add(i);
                }
                if (i.ItemHasBeenPlaced(Instance.Logic))
                {
                    itemsInUse.Add(i);
                }
            }

            foreach (var i in Data.LogicData)
            {
                if (i.PI != LogicObjects.MainTrackerInstance.Options.MyPlayerID || i.Ch == false || !Instance.ItemInRange(i.RI) || log[i.RI].IsEntrance())
                {
                    continue;
                }

                if (itemsInUse.Where(x => x.ID == i.RI).Any())
                {
                    Debugging.Log($"{log[i.RI].DictionaryName} was in use elsewhere");

                    var MatchingItems             = log.Where(x => x.SpoilerItem.Intersect(log[i.RI].SpoilerItem).Any());
                    var FindUnusedMatchingItem    = MatchingItems.Where(x => !itemsInUse.Where(y => y.ID == x.ID).Any());
                    var FindUnAquiredMatchingItem = MatchingItems.Where(x => !itemsAquired.Where(y => y.ID == x.ID).Any());

                    if (FindUnusedMatchingItem.Any())
                    {
                        Debugging.Log($"Unused Matching Item found: {FindUnusedMatchingItem.ToArray()[0].DictionaryName}");
                        var newItem = FindUnusedMatchingItem.First();
                        i.RI = newItem.ID;
                        itemsAquired.Add(newItem);
                        itemsInUse.Add(newItem);
                    }
                    else if (FindUnAquiredMatchingItem.Any())
                    {
                        Debugging.Log($"No Unused Matching Items Were Found, getting unaquired matching item.");
                        Debugging.Log($"Matching UnAquired Item Found: {FindUnAquiredMatchingItem.First().DictionaryName}");
                        var newItem = FindUnAquiredMatchingItem.First();
                        i.RI = newItem.ID;
                        itemsAquired.Add(newItem);
                        itemsInUse.Add(newItem);
                    }
                    else
                    {
                        Debugging.Log($"No Unused items were found. This is an error and could cause Issues.");
                    }
                }
            }
        }
Example #6
0
        public static void ManageNetData(LogicObjects.MMRTpacket Data)
        {
            var log             = LogicObjects.MainTrackerInstance.Logic;
            var Instance        = LogicObjects.MainTrackerInstance;
            var IPInSendingList = IPS.FindIndex(f => f.IP.ToString() == Data.IPData.IP && f.PORT == Data.IPData.PORT) > -1;

            //bool SameLAN = (Data.IPData.IP == MyIP.ToString() && Data.IPData.PORT != LogicObjects.MainTrackerInstance.Options.PortNumber);

            if (!IPInSendingList)
            {
                if (LogicObjects.MainTrackerInstance.Options.StrictIP)
                {
                    return;
                }
                if (LogicObjects.MainTrackerInstance.Options.AutoAddIncomingConnections)
                {
                    OnlinePlay_TriggerAddRemoteToIPList(Data);
                }
            }

            if (Data.RequestingUpdate != 0)
            {
                SendRequestedUpdate(Data, IPInSendingList);
            }

            if (Data.RequestingUpdate == 1)
            {
                return;
            }

            bool ChangesMade = false;

            if (LogicObjects.MainTrackerInstance.Options.IsMultiWorld)
            {
                CleanMultiWorldData(Instance, Data);
            }

            ListBox ItemsToCheck = new ListBox();

            foreach (var i in Data.LogicData)
            {
                if (LogicObjects.MainTrackerInstance.Options.IsMultiWorld)
                {
                    if (i.PI != LogicObjects.MainTrackerInstance.Options.MyPlayerID || i.Ch == false || !Instance.ItemInRange(i.RI) || log[i.RI].IsEntrance())
                    {
                        continue;
                    }
                    var entry = new LogicObjects.LogicEntry {
                        ID = -1, Checked = false, RandomizedItem = i.RI, SpoilerRandom = i.RI, Options = 0
                    };
                    ItemsToCheck.Items.Add(entry);
                    ChangesMade = true;
                }
                else if (Instance.ItemInRange(i.ID) && !log[i.ID].Checked)
                {
                    var entry = log[i.ID];
                    if (!entry.HasRandomItem(false))
                    {
                        entry.RandomizedItem = (entry.SpoilerRandom > -2 ? entry.SpoilerRandom : i.RI);
                        ChangesMade          = true;
                    }
                    if (LogicObjects.MainTrackerInstance.Options.AllowCheckingItems && i.Ch)
                    {
                        ItemsToCheck.Items.Add(entry);
                        ChangesMade = true;
                    }
                }
            }

            if (!ChangesMade)
            {
                return;
            }

            for (int i = 0; i < ItemsToCheck.Items.Count; i++)
            {
                ItemsToCheck.SetSelected(i, true);
            }
            MainInterface.CurrentProgram.CheckItemSelected(ItemsToCheck, true, 0, false, Data.PlayerID, true);
        }