Ejemplo n.º 1
0
 public void ReadFromStream(MStreamReader sr)
 {
     ButtonState = sr.ReadByte();
     Button      = sr.ReadByte();
     MouseX      = sr.ReadSingle();
     MouseY      = sr.ReadSingle();
     Time        = sr.ReadInt32();
 }
Ejemplo n.º 2
0
 public void ReadFromStream(MStreamReader sr)
 {
     Msg = new MessageStruct
     {
         Username      = sr.ReadString(),
         Message       = sr.ReadString(),
         ChannelTarget = sr.ReadString(),
         SenderId      = sr.ReadInt32()
     };
 }
Ejemplo n.º 3
0
 public void ReadFromStream(MStreamReader sr)
 {
     Status = new UserStatus
     {
         Status          = (Status)sr.ReadByte(),
         StatusText      = sr.ReadString(),
         BeatmapChecksum = sr.ReadString(),
         CurrentMods     = (Mod)sr.ReadUInt32(),
         Playmode        = (PlayMode)sr.ReadByte(),
         BeatmapId       = sr.ReadUInt32(),
     };
 }
Ejemplo n.º 4
0
        public void ReadFromStream(MStreamReader sr)
        {
            var c = sr.ReadInt32();

            for (var i = 0; i < c; i++)
            {
                FileNames.Add(sr.ReadString());
            }

            c = sr.ReadInt32();
            for (var i = 0; i < c; i++)
            {
                Ids.Add(sr.ReadInt32());
            }
        }
Ejemplo n.º 5
0
 public void ReadFromStream(MStreamReader sr)
 {
     BeatmapId        = sr.ReadInt32();
     ParentSetId      = sr.ReadInt32();
     DiffName         = sr.ReadString();
     FileMd5          = sr.ReadString();
     Mode             = (PlayMode)sr.ReadSByte();
     Bpm              = sr.ReadInt32();
     Ar               = sr.ReadSingle();
     Od               = sr.ReadSingle();
     Cs               = sr.ReadSingle();
     Hp               = sr.ReadSingle();
     TotalLength      = sr.ReadInt32();
     Playcount        = sr.ReadInt32();
     Passcount        = sr.ReadInt32();
     MaxCombo         = sr.ReadInt64();
     DifficultyRating = sr.ReadDouble();
 }
Ejemplo n.º 6
0
        public void ReadFromStream(MStreamReader sr)
        {
            MatchId     = sr.ReadInt16();
            InProgress  = sr.ReadBoolean();
            MatchType   = (MatchType)sr.ReadByte();
            ActiveMods  = (Mod)sr.ReadUInt32();
            Name        = sr.ReadString();
            Password    = sr.ReadString();
            BeatmapName = sr.ReadString();
            BeatmapId   = sr.ReadInt32();
            BeatmapMd5  = sr.ReadString();

            for (var i = 0; i < MaxPlayers; i++)
            {
                Slots[i].Status = (MultiSlotStatus)sr.ReadByte();
            }

            for (var i = 0; i < MaxPlayers; i++)
            {
                Slots[i].Team = (MultiSlotTeam)sr.ReadByte();
            }

            for (var i = 0; i < MaxPlayers; i++)
            {
                Slots[i].UserId = (Slots[i].Status & (MultiSlotStatus)124) > 0 ? sr.ReadInt32() : -1;
            }

            HostId       = sr.ReadInt32();
            PlayMode     = (PlayMode)sr.ReadByte();
            ScoringType  = (ScoringType)sr.ReadByte();
            TeamType     = (TeamType)sr.ReadByte();
            SpecialModes = (MatchSpecialModes)sr.ReadByte();

            if (SpecialModes == MatchSpecialModes.Freemods)
            {
                for (var i = 0; i < MaxPlayers; i++)
                {
                    Slots[i].Mods = (Mod)sr.ReadUInt32();
                }
            }

            Seed = sr.ReadInt32();
        }
Ejemplo n.º 7
0
        public void ReadFromStream(MStreamReader sr)
        {
            Extra = sr.ReadInt32();

            int count = sr.ReadInt16();

            ReplayFrames = new List <ReplayFrame>(count);
            for (var i = 0; i < count; i++)
            {
                var rframes = sr.ReadData <ReplayFrame>();
                ReplayFrames.Add(rframes);
            }

            Action = sr.ReadByte();

            var sframe = new ScoreFrame();

            sframe.ReadFromStream(sr);
            ScoreFrame = sframe;
        }
Ejemplo n.º 8
0
 public void ReadFromStream(MStreamReader sr)
 {
     Time         = sr.ReadInt32();
     Id           = sr.ReadByte();
     Count300     = sr.ReadUInt16();
     Count100     = sr.ReadUInt16();
     Count50      = sr.ReadUInt16();
     CountGeki    = sr.ReadUInt16();
     CountKatu    = sr.ReadUInt16();
     CountMiss    = sr.ReadUInt16();
     TotalScore   = sr.ReadInt32();
     MaxCombo     = sr.ReadUInt16();
     CurrentCombo = sr.ReadUInt16();
     Perfect      = sr.ReadBoolean();
     CurrentHp    = sr.ReadByte();
     TagByte      = sr.ReadByte();
     ScoreV2      = sr.ReadBoolean();
     ComboPortion = ScoreV2 ? sr.ReadDouble() : 0;
     BonusPortion = ScoreV2 ? sr.ReadDouble() : 0;
 }
Ejemplo n.º 9
0
        public void ReadFromStream(MStreamReader sr)
        {
            SetId = sr.ReadInt32();

            var count = sr.ReadInt32();

            ChildrenBeatmaps = new List <ChildrenBeatmap>();
            for (var i = 0; i < count; i++)
            {
                ChildrenBeatmaps.Add(sr.ReadData <ChildrenBeatmap>());
            }

            RankedStatus = (BeatmapSetOnlineStatus)sr.ReadSByte();

            if (DateTime.TryParse(sr.ReadString(), out var res))
            {
                ApprovedDate = res;
            }

            if (DateTime.TryParse(sr.ReadString(), out res))
            {
                LastUpdate = res;
            }

            if (DateTime.TryParse(sr.ReadString(), out res))
            {
                LastChecked = res;
            }

            Artist     = sr.ReadString();
            Title      = sr.ReadString();
            Creator    = sr.ReadString();
            Source     = sr.ReadString();
            Tags       = sr.ReadString();
            HasVideo   = sr.ReadBoolean();
            Genre      = (Genre)sr.ReadSByte();
            Language   = (Language)sr.ReadSByte();
            Favourites = sr.ReadInt64();
            Disabled   = sr.ReadBoolean();
        }
Ejemplo n.º 10
0
 public void ReadFromStream(MStreamReader sr)
 {
     ErrorState = (ErrorStates)sr.ReadInt32();
 }
Ejemplo n.º 11
0
 public void ReadFromStream(MStreamReader sr)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 12
0
 public void ReadFromStream(MStreamReader sr)
 {
     FriendId = sr.ReadInt32();
 }
Ejemplo n.º 13
0
 public void ReadFromStream(MStreamReader sr)
 {
     (Match = new Match()).ReadFromStream(sr);
 }
Ejemplo n.º 14
0
 public void ReadFromStream(MStreamReader sr)
 {
     ToSpectateId = sr.ReadInt32();
 }
Ejemplo n.º 15
0
 public void ReadFromStream(MStreamReader sr)
 {
     Room = new MultiplayerRoom();
     Room.ReadFromStream(sr);
 }
Ejemplo n.º 16
0
 public void ReadFromStream(MStreamReader sr)
 {
     MatchId  = sr.ReadInt32();
     Password = sr.ReadString();
 }
Ejemplo n.º 17
0
 public void ReadFromStream(MStreamReader sr)
 {
     UserId = sr.ReadInt32();
 }
Ejemplo n.º 18
0
 public void ReadFromStream(MStreamReader sr)
 {
     Mods = (Mod)sr.ReadUInt32();
 }
Ejemplo n.º 19
0
 public void ReadFromStream(MStreamReader sr)
 {
     UserIds = sr.ReadInt32List();
 }
Ejemplo n.º 20
0
 public void ReadFromStream(MStreamReader sr)
 {
     Protocol = sr.ReadUInt32();
 }
Ejemplo n.º 21
0
        //[Produces("application/octet-stream")]
        public async Task <IActionResult> IndexPOST(
            [FromHeader(Name = "osu-token")] string clientToken = null
            )
        {
            try
            {
                Response.Headers["cho-protocol"] = "19";
                Response.Headers["Connection"]   = "keep-alive";
                Response.Headers["Keep-Alive"]   = "timeout=60, max=100";
                Response.Headers["cho-server"]   = "Sora (https://github.com/Mempler/Sora)";

                Response.StatusCode = 200;

                await using var body = new MemoryStream();
                await Request.Body.CopyToAsync(body);

                body.Position = 0;

                await using var mw = MStreamWriter.New();
                using var mr       = new MStreamReader(body);

                Presence pr;
                try
                {
                    if (string.IsNullOrEmpty(clientToken))
                    {
                        pr = new Presence(_cs);
                        Response.Headers["cho-token"] = pr.Token;
                        string ip = Response.Headers["X-Forwarded-For"];

                        if (string.IsNullOrEmpty(ip))
                        {
                            ip = "127.0.0.1";
                        }

                        await _evmng.RunEvent(
                            EventType.BanchoLoginRequest,
                            new BanchoLoginRequestArgs { pr = pr, Reader = mr, Writer = mw, IPAddress = ip }
                            );

                        mw.Flush();

                        return(await RetOut(mw.BaseStream));
                    }
                } catch (Exception ex)
                {
                    Logger.Err(ex);
                    mw.Write(new LoginResponse(LoginResponses.Exception));
                    return(await RetOut(mw.BaseStream));
                }

                pr = _ps.GetPresence(Request.Headers["osu-token"]);
                if (pr == null)
                {
                    Logger.Warn(
                        "Presence of token%#F94848%", Request.Headers["osu-token"], "%#FFFFFF%hasn't been found!"
                        );
                    Response.StatusCode = 403; // Presence is not known, force the client to send login info.
                    return(await RetOut(mw.BaseStream));
                }

                while (true)
                {
                    try
                    {
                        pr.LastRequest.Restart();
                        if (Request.ContentLength - body.Position < 7)
                        {
                            break; // Dont handle any invalid packets! (less then bytelength of 7)
                        }
                        var packetId = (PacketId)mr.ReadInt16();
                        mr.ReadBoolean();
                        var packetData = mr.ReadBytes();

                        await using var packetDataStream = new MemoryStream(packetData);
                        using var packetDataReader       = new MStreamReader(packetDataStream);

                        await _evmng.RunEvent(
                            EventType.BanchoPacket,
                            new BanchoPacketArgs { pr = pr, PacketId = packetId, Data = packetDataReader }
                            );
                    } catch (Exception ex)
                    {
                        Logger.Err(ex);
                        break;
                    }
                }

                try
                {
                    if (Response.Body.CanWrite)
                    {
                        pr.GetOutput()
                        .WriteTo(Response.Body);
                    }
                    return(await RetOut(mw.BaseStream));
                } catch
                {
                    // Ignored because it may throw an exception.
                }

                if (pr.Get <bool>("IS_LAST_REQUEST"))
                {
                    _ps.EndPresence(pr, true);
                }
            } catch (Exception ex)
            {
                Logger.Err(ex);
            }

            return(Ok());
        }
Ejemplo n.º 22
0
 public void ReadFromStream(MStreamReader sr)
 {
     Match = new Match();
     Match.ReadFromStream(sr);
 }
Ejemplo n.º 23
0
 public void ReadFromStream(MStreamReader sr)
 {
     Frame = sr.ReadData <ScoreFrame>();
 }
Ejemplo n.º 24
0
 public void ReadFromStream(MStreamReader sr)
 {
     Frames = sr.ReadData <SpectatorFrame>();
 }
Ejemplo n.º 25
0
        public async Task <IActionResult> IndexPost([FromHeader(Name = "osu-token")] string clientToken = null)
        {
            try
            {
                Response.Headers["cho-protocol"] = "19";
                Response.Headers["Connection"]   = "keep-alive";
                Response.Headers["Keep-Alive"]   = "timeout=60, max=100";
                Response.Headers["cho-server"]   = "Sora (https://github.com/Mempler/Sora)";

                Response.StatusCode = 200;

                await using var body = new MemoryStream();
                await Request.Body.CopyToAsync(body);

                body.Position = 0;

                await using var mw = MStreamWriter.New();
                using var mr       = new MStreamReader(body);
                var pr = new Presence(new User());
                if (string.IsNullOrEmpty(clientToken))
                {
                    Response.Headers["cho-token"] = pr.Token.ToString();
                    string ip = Request.Headers["X-Real-IP"];

                    if (string.IsNullOrEmpty(ip))
                    {
                        ip = "127.0.0.1";
                    }

                    await _evManager.RunEvent(EventType.BanchoLoginRequest, new BanchoLoginRequestArgs
                    {
                        Reader    = mr,
                        Writer    = mw,
                        Pr        = pr,
                        IpAddress = ip
                    });

                    mw.Flush();

                    return(await RetOut(mw.BaseStream));
                }

                if (_presenceService.TryGet(new Token(clientToken.Trim()), out pr))
                {
                    while (true)
                    {
                        try
                        {
                            pr["LAST_PONG"] = DateTime.Now;

                            if (Request.ContentLength - body.Position < 7)
                            {
                                break; // Dont handle any invalid packets! (less then bytelength of 7)
                            }
                            var packetId = (PacketId)mr.ReadInt16();
                            mr.ReadBoolean();
                            var packetData = mr.ReadBytes();

                            await using var packetDataStream = new MemoryStream(packetData);
                            using var packetDataReader       = new MStreamReader(packetDataStream);
                            await _evManager.RunEvent(
                                EventType.BanchoPacket,
                                new BanchoPacketArgs { Pr = pr, PacketId = packetId, Data = packetDataReader }
                                );
                        }
                        catch (Exception ex)
                        {
                            Logger.Err(ex);
                            break;
                        }
                    }
                    try
                    {
                        await using var m = new MemoryStream();
                        if (Response.Body.CanWrite)
                        {
                            pr.WritePackets(m);
                        }

                        return(await RetOut(m));
                    }
                    catch (Exception ex)
                    {
                        Logger.Err(ex);
                        // Ignored because it may throw an exception.
                    }
                }
                else
                {
                    return(StatusCode(403));
                }
            }
            catch (Exception ex)
            {
                Logger.Err(ex);
            }

            return(Ok());
        }
Ejemplo n.º 26
0
 public void ReadFromStream(MStreamReader sr)
 {
     ChannelName = sr.ReadString();
 }
Ejemplo n.º 27
0
        public ActionResult PutDatabase(
            [FromQuery] string key,
            [FromQuery] bool drop
            )
        {
            if (key != Environment.GetEnvironmentVariable("PRIVATE_API_KEY"))
            {
                return(Unauthorized("Key is wrong!"));
            }

            if (drop)
            {
                _searchEngine.DeleteAllBeatmaps();
                using (var db = _contextFactory.GetForWrite()) {
                    db.Context.Database.ExecuteSqlCommand
                        ("SET FOREIGN_KEY_CHECKS = 0;" +
                        "TRUNCATE TABLE `Beatmaps`;" +
                        "ALTER TABLE `Beatmaps` AUTO_INCREMENT = 1;" +
                        "TRUNCATE TABLE `BeatmapSet`;" +
                        "ALTER TABLE `BeatmapSet` AUTO_INCREMENT = 1;" +
                        "SET FOREIGN_KEY_CHECKS = 1;");
                }
            }

            lock (_lock) {
                var f = Request.Form.Files["dump.piss"];

                using (var stream = f.OpenReadStream())
                    using (var sr = new MStreamReader(stream))
                        using (var db = _contextFactory.GetForWrite())
                        {
                            var count = sr.ReadInt32();
                            Logger.LogPrint($"Count: {count}");

                            for (var i = 0; i < count; i++)
                            {
                                var set = sr.ReadData <BeatmapSet>();

                                Logger.LogPrint($"Importing BeatmapSet {set.SetId} {set.Artist} - {set.Title} ({set.Creator}) of Index {i}", LoggingTarget.Database, LogLevel.Important);

                                if (!drop)
                                {
                                    if (db.Context.BeatmapSet.Any(s => s.SetId == set.SetId))
                                    {
                                        db.Context.BeatmapSet.Update(set);
                                    }
                                    else
                                    {
                                        db.Context.BeatmapSet.Add(set);
                                    }
                                }
                                else
                                {
                                    db.Context.BeatmapSet.Add(set);
                                }
                            }
                            Logger.LogPrint("Finish importing maps!");
                        }

                return(Ok("Success!"));
            }
        }