Exemplo n.º 1
0
        private static void RetrieveAllModTagsAsync(Action <IDictionary <string, ISet <string> >, bool> onCompletion)
        {
            Action <Exception, string> onGetFail = (e, output) => {
                if (e is JsonReaderException)
                {
                    LogHelpers.Alert("Bad JSON: " + (output.Length > 256 ? output.Substring(0, 256) : output));
                }
                else if (e is WebException || e is NullReferenceException)
                {
                    LogHelpers.Alert((output ?? "...") + " - " + e.Message);
                }
                else
                {
                    LogHelpers.Alert((output ?? "...") + " - " + e.ToString());
                }
            };

            Action <IDictionary <string, ISet <string> >, bool> onGetCompletion = (responseVal, found) => {
                if (responseVal == null)
                {
                    responseVal = new Dictionary <string, ISet <string> >();
                }

                onCompletion(responseVal, found);
            };

            NetHelpers.MakeGetRequestAsync(GetModTags.ModTagsUrl, GetModTags.HandleModTagsReceipt, onGetFail, onGetCompletion);
        }
Exemplo n.º 2
0
        internal bool TryMark(EndPoint endPoint, ProtocolTypes protocolTypes, ServerQuality quality)
        {
            lock ( listLock )
            {
                ServerInfo[] serverInfos;

                if (quality == ServerQuality.Good)
                {
                    serverInfos = servers.Where(x => x.Record.EndPoint.Equals(endPoint) && x.Protocol.HasFlagsFast(protocolTypes)).ToArray();
                }
                else
                {
                    // If we're marking this server for any failure, mark all endpoints for the host at the same time
                    var host = NetHelpers.ExtractEndpointHost(endPoint).host;
                    serverInfos = servers.Where(x => x.Record.GetHost().Equals(host)).ToArray();
                }

                if (serverInfos.Length == 0)
                {
                    return(false);
                }

                foreach (var serverInfo in serverInfos)
                {
                    MarkServerCore(serverInfo, quality);
                }

                return(true);
            }
        }
        private static void RetrieveBadModsAsync(Action <IDictionary <string, int>, bool> onSuccess)
        {
            Action <Exception, string> onFail = (e, output) => {
                if (e is JsonReaderException)
                {
                    LogHelpers.Alert("Bad JSON: " + (output.Length > 256 ? output.Substring(0, 256) : output));
                }
                else if (e is WebException || e is NullReferenceException)
                {
                    LogHelpers.Alert((output ?? "") + " - " + e.Message);
                }
                else
                {
                    LogHelpers.Alert((output ?? "") + " - " + e.ToString());
                }
            };

            Action <IDictionary <string, int>, bool> onCompletion = (responseVal, success) => {
                if (responseVal == null)
                {
                    responseVal = new Dictionary <string, int>();
                }

                onSuccess(responseVal, success);
            };

            NetHelpers.MakeGetRequestAsync(GetModInfo.BadModsUrl, GetModInfo.HandleBadModsReceipt, onFail, onCompletion);
        }
Exemplo n.º 4
0
        void HandleLogOnResponse(IPacketMsg packetMsg)
        {
            if (!packetMsg.IsProto)
            {
                // a non proto ClientLogonResponse can come in as a result of connecting but never sending a ClientLogon
                // in this case, it always fails, so we don't need to do anything special here
                DebugLog.WriteLine("CMClient", "Got non-proto logon response, this is indicative of no logon attempt after connecting.");
                return;
            }

            var logonResp = new ClientMsgProtobuf <CMsgClientLogonResponse>(packetMsg);

            if (logonResp.Body.eresult == ( int )EResult.OK)
            {
                SessionID = logonResp.ProtoHeader.client_sessionid;
                SteamID   = logonResp.ProtoHeader.steamid;

                CellID        = logonResp.Body.cell_id;
                PublicIP      = NetHelpers.GetIPAddress(logonResp.Body.public_ip);
                IPCountryCode = logonResp.Body.ip_country_code;

                int hbDelay = logonResp.Body.out_of_game_heartbeat_seconds;

                // restart heartbeat
                heartBeatFunc.Stop();
                heartBeatFunc.Delay = TimeSpan.FromSeconds(hbDelay);
                heartBeatFunc.Start();
            }
        }
        public static void SubmitModInfo(string modName, ISet <string> modTags, Action <string> onSuccess, Action <Exception, string> onError, Action onCompletion = null)
        {
            string url  = "http://hamstar.pw/hamstarhelpers/mod_info_submit/";
            var    json = new PostModTagsData {
                modname = modName,
                modtags = string.Join(",", modTags)
            };

            string jsonStr = JsonConvert.SerializeObject(json, Formatting.Indented);

            byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonStr);

            Action <String> onResponse = (output) => {
                JObject respJson = JObject.Parse(output);
                JToken  msg      = respJson.SelectToken("Msg");

                if (msg == null)
                {
                    onSuccess("Failure.");
                }
                else
                {
                    onSuccess(msg.ToObject <string>());
                }
            };

            Action <Exception, string> wrappedOnError = (Exception e, string str) => {
                LogHelpers.Log("!ModHelpers.PostModInfo.SubmitModInfo - Failed for post: " + jsonStr);
                onError(e, str);
            };

            NetHelpers.MakePostRequestAsync(url, jsonBytes, onResponse, wrappedOnError, onCompletion);
        }
Exemplo n.º 6
0
        void HandleLogOnResponse(IPacketMsg packetMsg)
        {
            if (!packetMsg.IsProto)
            {
                // a non proto ClientLogonResponse can come in as a result of connecting but never sending a ClientLogon
                // in this case, it always fails, so we don't need to do anything special here
                LogDebug("CMClient", "Got non-proto logon response, this is indicative of no logon attempt after connecting.");
                return;
            }

            var logonResp   = new ClientMsgProtobuf <CMsgClientLogonResponse>(packetMsg);
            var logonResult = ( EResult )logonResp.Body.eresult;

            if (logonResult == EResult.OK)
            {
                SessionID = logonResp.ProtoHeader.client_sessionid;
                SteamID   = logonResp.ProtoHeader.steamid;

                CellID        = logonResp.Body.cell_id;
                PublicIP      = NetHelpers.GetIPAddress(logonResp.Body.deprecated_public_ip);
                IPCountryCode = logonResp.Body.ip_country_code;

                int hbDelay = logonResp.Body.out_of_game_heartbeat_seconds;

                // restart heartbeat
                heartBeatFunc.Stop();
                heartBeatFunc.Delay = TimeSpan.FromSeconds(hbDelay);
                heartBeatFunc.Start();
            }
            else if (logonResult == EResult.TryAnotherCM || logonResult == EResult.ServiceUnavailable)
            {
                Servers.TryMark(connection.CurrentEndPoint, connection.ProtocolTypes, ServerQuality.Bad);
            }
        }
        public static void ReportIssue(Mod mod, string issueTitle, string issueBody, Action <string> onSuccess, Action <Exception, string> onError, Action onCompletion = null)
        {
            if (!ModFeaturesHelpers.HasGithub(mod))
            {
                throw new HamstarException("Mod is not eligable for submitting issues.");
            }

            int maxLines = ModHelpersMod.Instance.Config.ModIssueReportErrorLogMaxLines;

            IEnumerable <Mod> mods       = ModListHelpers.GetAllLoadedModsPreferredOrder();
            string            bodyInfo   = string.Join("\n \n", InfoHelpers.GetGameData(mods).ToArray());
            string            bodyErrors = string.Join("\n", InfoHelpers.GetErrorLog(maxLines).ToArray());

            string url   = "http://hamstar.pw/hamstarhelpers/issue_submit/";
            string title = "Reported from in-game: " + issueTitle;
            string body  = bodyInfo;

            body += "\n \n \n \n" + "Recent error logs:\n```\n" + bodyErrors + "\n```";
            body += "\n \n" + issueBody;

            var json = new GithubModIssueReportData {
                githubuser    = ModFeaturesHelpers.GetGithubUserName(mod),
                githubproject = ModFeaturesHelpers.GetGithubProjectName(mod),
                title         = title,
                body          = body
            };
            string jsonStr = JsonConvert.SerializeObject(json, Formatting.Indented);

            byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonStr);

            Action <String> onResponse = (output) => {
                JObject respJson = JObject.Parse(output);
                //JToken data = respJson.SelectToken( "Data.html_url" );
                JToken msg = respJson.SelectToken("Msg");

                /*if( data != null ) {
                 *      string post_at_url = data.ToObject<string>();
                 *      if( !string.IsNullOrEmpty( post_at_url ) ) {
                 *              SystemHelpers.Start( post_at_url );
                 *      }
                 * }*/

                if (msg == null)
                {
                    onSuccess("Failure.");
                }
                else
                {
                    onSuccess(msg.ToObject <string>());
                }
            };

            Action <Exception, string> wrappedOnError = (Exception e, string str) => {
                LogHelpers.Log("!ModHelpers.PostGithubModIssueReports.ReportIssue - Failed for POST to " + url + " : " + jsonStr);
                onError(e, str);
            };

            NetHelpers.MakePostRequestAsync(url, jsonBytes, onResponse, wrappedOnError, onCompletion);
        }
Exemplo n.º 8
0
        public void TryParseIPEndPoint()
        {
            Assert.True(NetHelpers.TryParseIPEndPoint("127.0.0.1:1337", out var parsedIp));
            Assert.Equal(new IPEndPoint(IPAddress.Loopback, 1337), parsedIp);

            Assert.True(NetHelpers.TryParseIPEndPoint("[::1]:1337", out var parsedIpv6));
            Assert.Equal(new IPEndPoint(IPAddress.IPv6Loopback, 1337), parsedIpv6);
        }
        /// <summary>
        /// Parses data when Discord sends a message.
        /// </summary>
        private void Socket_OnDataReceived(object sender, MessageEventArgs e)
        {
            var json = e.Data;

            if (json == null)
            {
                return;
            }
            if (json.Length <= 1)
            {
                return;
            }

            if (debug)
            {
                Console.WriteLine("\n" + json + "\n");
            }

            if (!DiscordMessageFactory.TryParseDispatchMessage(json, out var msg))
            {
                return;
            }
            LastSequenceNumber = msg.SequenceNumber;

            var chatmsg = msg.GetChatMessageData();

            if (chatmsg != null && Channel_IDs.Contains(chatmsg.ChannelId))
            {
                if (!chatmsg.Author.IsBot)
                {
                    string msgout = chatmsg.Message;

                    // Lazy add commands until I take time to design a command service properly
                    //if (ExecuteCommand(chatmsg))
                    //    return;

                    msgout = chatParser.ConvertUserIdsToNames(msgout, chatmsg.UsersMentioned);
                    msgout = chatParser.ShortenEmojisToName(msgout);
                    msgout = $"<{chatmsg.Author.Username}> {msgout}";

                    NetHelpers.BroadcastChatMessageWithoutTCRFormattable(
                        ("[c/7489d8:Discord] - " + msgout), -1);

                    if (Channel_IDs.Count > 1)
                    {
                        messageQueue.QueueMessage(
                            Channel_IDs.Where(x => x != chatmsg.ChannelId),
                            $"**[Discord]** <{chatmsg.Author.Username}> {chatmsg.Message}");
                    }

                    Console.ForegroundColor = ConsoleColor.Blue;
                    Console.Write("[Discord] ");
                    Console.ResetColor();
                    Console.Write(msgout);
                    Console.WriteLine();
                }
            }
        }
Exemplo n.º 10
0
        public void CreateMarker()
        {
            PlayerPerformAction p = new PlayerPerformAction(PacketTypes.SET);

            p.id       = PlayerName;
            p.key      = PassKey;
            p.ActionID = 0;
            StreamController.StreamWrite(NetHelpers.ConvertStructToBytes(p));
        }
Exemplo n.º 11
0
        public void GetPlayerInfo()
        {
            PlayerInfo playa = new PlayerInfo(PacketTypes.REQUEST);

            playa.id  = PlayerName;
            playa.key = PassKey;
            byte[] b = NetHelpers.ConvertStructToBytes(playa);
            StreamController.StreamWrite(b);
        }
Exemplo n.º 12
0
            static ILuaMultiValue _read(int[] opts, StreamReader s, ILuaEnvironment E)
            {
                List <ILuaValue> ret = new List <ILuaValue>();

                foreach (var item in opts)
                {
                    switch (item)
                    {
                    case -4:
                        ret.Add(E.Runtime.CreateValue(s.EndOfStream ? null : s.ReadLine() + "\n"));
                        break;

                    case -3:
                        ret.Add(E.Runtime.CreateValue(s.EndOfStream ? null : s.ReadLine()));
                        break;

                    case -2:
                        ret.Add(E.Runtime.CreateValue(s.EndOfStream ? null : s.ReadToEnd()));
                        break;

                    case -1:
                        if (s.EndOfStream)
                        {
                            ret.Add(null);
                        }
                        else
                        {
                            double?d = NetHelpers.ReadNumber(s);
                            if (d.HasValue)
                            {
                                ret.Add(E.Runtime.CreateValue(d.Value));
                            }
                            else
                            {
                                ret.Add(LuaNil.Nil);
                            }
                        }
                        break;

                    default:
                        if (s.EndOfStream)
                        {
                            ret.Add(null);
                        }
                        else
                        {
                            char[] c = new char[item];
                            s.Read(c, 0, item);
                            ret.Add(E.Runtime.CreateValue(new string(c)));
                        }
                        break;
                    }
                }

                return(E.Runtime.CreateMultiValue(ret.ToArray()));
            }
Exemplo n.º 13
0
 public void ObfuscatePrivateIP()
 {
     Assert.Equal(3316510732u, NetHelpers.GetMsgIPAddress(IPAddress.Loopback).ObfuscatePrivateIP().v4);
     Assert.Equal(new byte[] {
         0x0D, 0xF0, 0xAD, 0xBA,
         0x0D, 0xF0, 0xAD, 0xBA,
         0x0D, 0xF0, 0xAD, 0xBA,
         0x0D, 0xF0, 0xAD, 1 ^ 0xBA
     }, NetHelpers.GetMsgIPAddress(IPAddress.IPv6Loopback).ObfuscatePrivateIP().v6);
 }
Exemplo n.º 14
0
 public void GetMsgIPAddress()
 {
     Assert.Equal(2130706433u, NetHelpers.GetMsgIPAddress(IPAddress.Loopback).v4);
     Assert.Equal(new byte[] {
         0, 0, 0, 0,
         0, 0, 0, 0,
         0, 0, 0, 0,
         0, 0, 0, 1
     }, NetHelpers.GetMsgIPAddress(IPAddress.IPv6Loopback).v6);
 }
Exemplo n.º 15
0
        public void SetPlayerDirection(int dir, int moveCount)
        {
            PlayerControl playa = new PlayerControl(PacketTypes.SET);

            playa.id        = PlayerName;
            playa.key       = PassKey;
            playa.direction = dir;
            playa.paces     = moveCount;
            byte[] b = NetHelpers.ConvertStructToBytes(playa);
            StreamController.StreamWrite(b);
        }
Exemplo n.º 16
0
            public override void Generate(ItemData data)
            {
                var field = AddMethodArg(data, Method);

                // define a non-conflict named method that will back the given method.
                string name = Name;

                if (data.Names.Contains(name))
                {
                    name = name + "_" + (data.FID++);
                }
                data.Names.Add(name);

                // Define the new method.
                var         param = BoundTo.GetParameters();
                var         meth  = NetHelpers.CloneMethod(data.TB, name, BoundTo);
                ILGenerator gen   = meth.GetILGenerator();

                // ILuaValue[] loc = new ILuaValue[{param.length}];
                LocalBuilder loc = gen.CreateArray(typeof(ILuaValue), param.Length);

                for (int ind = 0; ind < param.Length; ind++)
                {
                    // loc[{ind}] = E.Runtime.CreateValue(arg_{ind});
                    gen.Emit(OpCodes.Ldloc, loc);
                    gen.Emit(OpCodes.Ldc_I4, ind);
                    gen.Emit(OpCodes.Ldarg_0);
                    gen.Emit(OpCodes.Ldfld, data.EnvField);
                    gen.Emit(OpCodes.Callvirt, typeof(ILuaEnvironment).GetProperty(nameof(ILuaEnvironment.Runtime)).GetGetMethod());
                    gen.Emit(OpCodes.Ldarg, ind + 1);
                    if (!param[ind].ParameterType.IsClass)
                    {
                        gen.Emit(OpCodes.Box, param[ind].ParameterType);
                    }
                    gen.Emit(OpCodes.Callvirt, typeof(ILuaRuntime).GetMethod(nameof(ILuaRuntime.CreateValue)));
                    gen.Emit(OpCodes.Stelem, typeof(ILuaValue));
                }

                // ILuaMultiValue args = E.Runtime.CreateMultiValue(loc);
                var args = gen.DeclareLocal(typeof(ILuaMultiValue));

                gen.Emit(OpCodes.Ldarg_0);
                gen.Emit(OpCodes.Ldfld, data.EnvField);
                gen.Emit(OpCodes.Callvirt, typeof(ILuaEnvironment).GetProperty(nameof(ILuaEnvironment.Runtime)).GetGetMethod());
                gen.Emit(OpCodes.Ldloc, loc);
                gen.Emit(OpCodes.Callvirt, typeof(ILuaRuntime).GetMethod(nameof(ILuaRuntime.CreateMultiValue)));
                gen.Emit(OpCodes.Stloc, args);

                CallFieldAndReturn(gen, BoundTo.ReturnType, field, args, data.EnvField);

                // link our new method to the method it's bound to.
                data.TB.DefineMethodOverride(meth, BoundTo);
                data.Methods.Add(BoundTo);
            }
Exemplo n.º 17
0
        /// <summary>
        /// Creates a Socket server given an IP endpoint.
        /// </summary>
        /// <param name="address">The IP address and port of the server, as a string.</param>
        /// <param name="serverRecord">A new <see cref="ServerRecord"/>, if the address was able to be parsed. <c>null</c> otherwise.</param>
        /// <returns><c>true</c> if the address was able to be parsed, <c>false</c> otherwise.</returns>
        public static bool TryCreateSocketServer(string address, [NotNullWhen(true)] out ServerRecord?serverRecord)
        {
            if (!NetHelpers.TryParseIPEndPoint(address, out var endPoint))
            {
                serverRecord = default(ServerRecord);
                return(false);
            }

            serverRecord = new ServerRecord(endPoint, ProtocolTypes.Tcp | ProtocolTypes.Udp);
            return(true);
        }
Exemplo n.º 18
0
        public void Startup()
        {
            _telemetryData = new TelemetryData();
            _timingData    = new TimingData();
            _analysisData  = new AnalysisManager();

            lsvPlugins.Items.Clear();

            _plugins = new Dictionary <string, IGame>();
            ICollection <IGame> plugins = PluginLoader <IGame> .LoadPlugins("Plugins");

            if (plugins.Count > 0)
            {
                foreach (var item in plugins)
                {
                    _plugins.Add(item.Name, item);

                    string[] lvText = new string[4];
                    lvText[0] = "";
                    lvText[1] = item.DisplayName;
                    lvText[2] = item.Version;

                    ListViewItem lvItem = new ListViewItem(lvText);

                    Bitmap pluginIcon = item.Icon;

                    if (pluginIcon != null)
                    {
                        imageListPlugins.Images.Add(item.Name, pluginIcon);
                        lvItem.ImageKey = item.Name;
                    }
                    else
                    {
                        lvItem.ImageKey = "missing";
                    }

                    lsvPlugins.Items.Add(lvItem);
                }
                _processMonitor = new ProcessMonitor(_plugins);
                _processMonitor.GameLoadedEvent += new ProcessMonitor.GameLoaded(GameLoaded);
                _processMonitor.GameClosedEvent += new ProcessMonitor.GameClosed(GameClosed);
                _processMonitor.StartProcessMonitor();

                _ipAddress = NetHelpers.GetLocalIpAddress();

                StartWebServer();
            }
            else
            {
                MessageBox.Show("No Plugins Were Found, Application will now exit", "Plugin Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
        }
Exemplo n.º 19
0
        void HandleCMList(IPacketMsg packetMsg)
        {
            var cmMsg = new ClientMsgProtobuf <CMsgClientCMList>(packetMsg);

            DebugLog.Assert(cmMsg.Body.cm_addresses.Count == cmMsg.Body.cm_ports.Count, "CMClient", "HandleCMList received malformed message");

            var cmList = cmMsg.Body.cm_addresses
                         .Zip(cmMsg.Body.cm_ports, (addr, port) => new IPEndPoint(NetHelpers.GetIPAddress(addr), ( int )port));

            // update our list with steam's list of CMs
            Servers.MergeWithList(cmList);
        }
Exemplo n.º 20
0
        //What we should do instead is get a larger region (if not the whole region)
        //Reduce the amount of times the cells need paged in.
        public void GetRegionCells(int x1, int x2, int y1, int y2)
        {
            //pauseAsync = true;
            RegionInfo ri = new RegionInfo(PacketTypes.REQUEST);

            ri.x1 = x1;
            ri.x2 = x2;
            ri.y1 = y1;
            ri.y2 = y2;
            ri.regionDataTypes = WorldConstants.REGION_INFO_ALL;
            StreamController.StreamWrite(NetHelpers.ConvertStructToBytes(ri));
        }
Exemplo n.º 21
0
        public bool ProcessPacket(StreamWriter s, PacketTypes p, DataTypes d, byte[] buff, ref int offset)
        {
            try
            {
                switch (d)
                {
                //Package the Region Data and Send it
                case DataTypes.REGION_INFO:
                {
                    RegionInfo ri = NetHelpers.ConvertBytesToStruct <RegionInfo>(buff, ref offset);
                    ProcessRegionInfo(s, p, ri);
                    return(true);
                }

                case DataTypes.PLAYER_INFO:
                {
                    PlayerInfo pi = NetHelpers.ConvertBytesToStruct <PlayerInfo>(buff, ref offset);
                    ProcessPlayerInfo(s, p, pi);
                    return(true);
                }

                case DataTypes.OBJECT_INFO:
                {
                    ObjectInfo oi = NetHelpers.ConvertBytesToStruct <ObjectInfo>(buff, ref offset);
                    ProcessObjectInfo(s, p, oi);
                    return(true);
                }

                case DataTypes.PLAYER_CONTROL:
                {
                    PlayerControl oi = NetHelpers.ConvertBytesToStruct <PlayerControl>(buff, ref offset);
                    ProcessPlayerControl(s, p, oi);
                    return(true);
                }

                case DataTypes.PLAYER_PERFORM_ACTION:
                {
                    PlayerPerformAction oi = NetHelpers.ConvertBytesToStruct <PlayerPerformAction>(buff, ref offset);
                    ProcessPlayerAction(s, p, oi);
                    return(true);
                }

                default:
                    return(false);
                }
            }
            catch
            {
                //Convert Bytes throws an exception if there isn't enough bytes to convert
                return(false);
            }
        }
Exemplo n.º 22
0
        public void ObjectAdded(WorldObject o)
        {
            //At Some point restrict to only updates around players
            var coord = o.GetPosition();
            var pi    = new ObjectInfo(PacketTypes.UPDATE)
            {
                id         = o.Id,
                objecttype = (int)o.ObjectType,
                x          = coord.x,
                y          = coord.y,
            };

            Net.BroadcastToClients(NetHelpers.ConvertStructToBytes(pi));
        }
Exemplo n.º 23
0
        private bool ProcessPlayerInfo(StreamWriter s, PacketTypes p, PlayerInfo pi)
        {
            switch (p)
            {
            case PacketTypes.REQUEST:
            {
                Player playa = WorldInterface.GetPlayer(pi.id, pi.key);
                if (playa != null)
                {
                    PlayerID = pi.id;
                    var coord = playa.GetPosition();
                    var vel   = playa.GetVelocity();
                    pi = new PlayerInfo(PacketTypes.REQUESTED)
                    {
                        id = playa.Id,
                        x  = coord.x,
                        y  = coord.y,
                        vx = vel.x,
                        vy = vel.y
                    };
                    s(NetHelpers.ConvertStructToBytes(pi));


                    //Send over object positions in the region surrounding our player
                    //DON'T DO THIS YET... Still thinking about it, Client needs to support it
                    foreach (var obj in WorldInterface.GetRegionObjects(coord.x - 10, coord.x + 10, coord.y - 10, coord.y + 10))
                    {
                        if (obj == null)
                        {
                            continue;
                        }
                        var oc = obj.GetPosition();
                        var oi = new ObjectInfo(PacketTypes.REQUESTED)
                        {
                            id         = obj.Id,
                            objecttype = (int)obj.ObjectType,
                            x          = oc.x,
                            y          = oc.y,
                            vx         = 0,
                            vy         = 0,
                        };
                        s(NetHelpers.ConvertStructToBytes(oi));
                    }
                }
                return(true);
            }
            }
            return(false);
        }
Exemplo n.º 24
0
        void HandleServerList(IPacketMsg packetMsg)
        {
            var listMsg = new ClientMsgProtobuf <CMsgClientServerList>(packetMsg);

            foreach (var server in listMsg.Body.servers)
            {
                var type = ( EServerType )server.server_type;

                if (!serverMap.TryGetValue(type, out var endpointSet))
                {
                    serverMap[type] = endpointSet = new HashSet <IPEndPoint>();
                }

                endpointSet.Add(new IPEndPoint(NetHelpers.GetIPAddress(server.server_ip), ( int )server.server_port));
            }
        }
        public void UnloadOuter()
        {
            this.ReflectionHelpers         = null;
            this.PacketProtocolMngr        = null;
            this.ExceptionMngr             = null;
            this.Timers                    = null;
            this.ConfigJson                = null;
            this.LogHelpers                = null;
            this.ModFeaturesHelpers        = null;
            this.BuffHelpers               = null;
            this.NetHelpers                = null;
            this.ItemIdentityHelpers       = null;
            this.NPCIdentityHelpers        = null;
            this.ProjectileIdentityHelpers = null;
            this.BuffIdentityHelpers       = null;
            this.NPCBannerHelpers          = null;
            this.RecipeIdentityHelpers     = null;
            this.RecipeGroupHelpers        = null;
            this.PlayerHooks               = null;
            this.LoadHelpers               = null;
            this.GetModInfo                = null;
            this.GetModTags                = null;
            this.WorldStateHelpers         = null;
            this.ModLock                   = null;
            this.EntityGroups              = null;
            this.AnimatedColors            = null;
            this.PlayerMessages            = null;
            this.Inbox                 = null;
            this.ControlPanel          = null;
            this.MenuItemMngr          = null;
            this.MenuContextMngr       = null;
            this.MusicHelpers          = null;
            this.PlayerIdentityHelpers = null;
            this.CustomEntMngr         = null;
            this.Promises              = null;
            this.DataStore             = null;
            this.CustomHotkeys         = null;
            this.XnaHelpers            = null;
            this.ServerInfo            = null;
            //this.PlayerDataMngr = null;
            this.SupportInfo    = null;
            this.RecipeHack     = null;
            this.ModListHelpers = null;

            this.ControlPanelHotkey = null;
            this.DataDumpHotkey     = null;
        }
Exemplo n.º 26
0
        public void PlayerUpdated(Player p)
        {
            //Determine what information needs to be sent
            //Back to the Client
            var coord = p.GetPosition();
            var v     = p.GetVelocity();
            var pi    = new PlayerInfo(PacketTypes.UPDATE)
            {
                id = p.Id,
                x  = coord.x,
                y  = coord.y,
                vx = v.x,
                vy = v.y
            };

            Net.SendToPlayer(p.Id, NetHelpers.ConvertStructToBytes(pi));
        }
Exemplo n.º 27
0
        public void MoverUpdated(Moveable m)
        {
            //At Some point restrict to only updates around players
            var coord = m.GetPosition();
            var v     = m.GetVelocity();
            var pi    = new ObjectInfo(PacketTypes.UPDATE)
            {
                id         = m.Id,
                objecttype = (int)m.ObjectType,
                x          = coord.x,
                y          = coord.y,
                vx         = v.x,
                vy         = v.y
            };

            Net.BroadcastToClients(NetHelpers.ConvertStructToBytes(pi));
        }
Exemplo n.º 28
0
        public static bool ProcessPacket(StreamWriter s, PacketTypes p, DataTypes d, byte[] buff, ref int offset)
        {
            try
            {
                switch (d)
                {
                //Package the Region Data and Send it
                case DataTypes.CELL_INFO:
                {
                    CellInfo ci = NetHelpers.ConvertBytesToStruct <CellInfo>(buff, ref offset);
                    ProcessCellInfo(s, p, ci);
                    return(true);
                }

                case DataTypes.REGION_INFO:
                {
                    RegionInfo ri = NetHelpers.ConvertBytesToStruct <RegionInfo>(buff, ref offset);
                    ProcessRegionInfo(s, p, ri);
                    return(true);
                }

                case DataTypes.PLAYER_INFO:
                {
                    PlayerInfo pi = NetHelpers.ConvertBytesToStruct <PlayerInfo>(buff, ref offset);
                    ProcessPlayerInfo(s, p, pi);
                    return(true);
                }

                case DataTypes.OBJECT_INFO:
                {
                    ObjectInfo pi = NetHelpers.ConvertBytesToStruct <ObjectInfo>(buff, ref offset);
                    ProcessObjectInfo(s, p, pi);
                    return(true);
                }

                default:
                    return(false);
                }
            }
            catch
            {
                //Convert Bytes throws an exception if there isn't enough bytes to convert
                return(false);
            }
        }
Exemplo n.º 29
0
        private static void DoWorkToValidateServer(ServerBrowserEntry server_data, string hash)
        {
            string hash_base = "";
            bool   found     = false;

            for (int i = 0; i < 1000000; i++)
            {
                hash_base = i + "";

                string test_hash = SystemHelpers.ComputeSHA256Hash(hash_base);
                if (hash == test_hash)
                {
                    found = true;
                    break;
                }
            }

            if (!found)
            {
                LogHelpers.Log("Server browser processing failed; no matching hash.");
                return;
            }

            var output_obj = new ServerBrowserWorkProof {
                ServerIP  = server_data.ServerIP,
                Port      = server_data.Port,
                WorldName = server_data.WorldName,
                HashBase  = hash_base
            };

            string json_str = JsonConvert.SerializeObject(output_obj, Formatting.None);

            byte[] json_bytes = Encoding.UTF8.GetBytes(json_str);

            Thread.Sleep(1500);

            NetHelpers.MakePostRequestAsync(ServerBrowserReporter.URL, json_bytes, delegate(string output) {
                LogHelpers.Log("Server browser processing complete.");
            }, delegate(Exception e, string output) {
                LogHelpers.Log("Server browser reply returned error: " + e.ToString());
            });

            ServerBrowserReporter.LastSendTimestamp = SystemHelpers.TimeStampInSeconds();
        }
        private void LoadOuter()
        {
            this.ReflectionHelpers = new ReflectionHelpers();
            this.DataStore         = new DataStore();
            this.Promises          = new Promises();
            this.LoadHelpers       = new LoadHelpers();

            this.Timers             = new Timers();
            this.LogHelpers         = new LogHelpers();
            this.ModFeaturesHelpers = new ModFeaturesHelpers();
            this.PacketProtocolMngr = new PacketProtocolManager();

            this.BuffHelpers               = new BuffHelpers();
            this.NetHelpers                = new NetHelpers();
            this.ItemIdentityHelpers       = new ItemIdentityHelpers();
            this.NPCIdentityHelpers        = new NPCIdentityHelpers();
            this.ProjectileIdentityHelpers = new ProjectileIdentityHelpers();
            this.BuffIdentityHelpers       = new BuffIdentityHelpers();
            this.NPCBannerHelpers          = new NPCBannerHelpers();
            this.RecipeIdentityHelpers     = new RecipeIdentityHelpers();
            this.RecipeGroupHelpers        = new RecipeGroupHelpers();
            this.PlayerHooks               = new ExtendedPlayerHooks();
            this.WorldStateHelpers         = new WorldStateHelpers();
            this.ControlPanel              = new UIControlPanel();
            this.ModLock               = new ModLockService();
            this.EntityGroups          = new EntityGroups();
            this.PlayerMessages        = new PlayerMessages();
            this.Inbox                 = new InboxControl();
            this.GetModInfo            = new GetModInfo();
            this.GetModTags            = new GetModTags();
            this.MenuItemMngr          = new MenuItemManager();
            this.MenuContextMngr       = new MenuContextServiceManager();
            this.MusicHelpers          = new MusicHelpers();
            this.PlayerIdentityHelpers = new PlayerIdentityHelpers();
            this.CustomEntMngr         = new CustomEntityManager();
            this.CustomHotkeys         = new CustomHotkeys();
            this.XnaHelpers            = new XnaHelpers();
            this.ServerInfo            = new ServerInfo();
            //this.PlayerDataMngr = new PlayerDataManager();
            this.SupportInfo    = new SupportInfoDisplay();
            this.RecipeHack     = new RecipeHack();
            this.ModListHelpers = new ModListHelpers();
        }