Beispiel #1
0
        private static void ProxyPacketAnalysisLoop()
        {
            while (true)
            {
                var successDequeue = _splitter.Packets.TryDequeue(out var data);
                if (!successDequeue)
                {
                    Thread.Sleep(100);
                    continue;
                }

                if (data.Contains(":tcc"))
                {
                    PacketProcessor.HandleGpkData(data.Substring(data.IndexOf(":tcc", StringComparison.Ordinal)));
                }
                else
                {
                    var split = data.Split(new[] { "\t::\t" }, StringSplitOptions.RemoveEmptyEntries);

                    var type = split[0];
                    if (type == "output")
                    {
                        //Console.WriteLine($"[Proxy] received output: {split[3]}");
                        var channel = uint.Parse(split[1]);
                        var author  = split[2];
                        var message = split[3];

                        PacketProcessor.HandleProxyOutput(author, channel, AddFontTagsIfMissing(message));

                        ////TODO: parse author
                        //var msg = data.StartsWith("<font", StringComparison.InvariantCultureIgnoreCase) ? data : "<FONT>" + data;
                        //msg = msg.EndsWith("</font>", StringComparison.InvariantCultureIgnoreCase) ? msg : msg + "</FONT>";
                        //PacketProcessor.HandleCommandOutput(msg);
                    }
                    else if (type == "packet")
                    {
                        //Console.WriteLine($"[Proxy] received packet: {split[2]}");
                        var dir = bool.Parse(split[1])
                            ? MessageDirection.ServerToClient
                            : MessageDirection.ClientToServer;
                        PacketProcessor.EnqueueMessageFromProxy(dir, split[2]);
                    }
                    else if (type == "setval")
                    {
                        var propName = split[1];
                        var val      = split[2];
                        SetProperty(propName, val);
                        //Console.WriteLine($"[Proxy] received setval: {split[1]} - {split[2]}");
                    }
                }
            }
            // ReSharper disable once FunctionNeverReturns
        }