Пример #1
0
        private bnet.protocol.storage.ExecuteResponse GetToonSettings(bnet.protocol.storage.ExecuteRequest request)
        {
            var results = new List <bnet.protocol.storage.OperationResult>();

            foreach (var operation in request.OperationsList)
            {
                var operationResult = bnet.protocol.storage.OperationResult.CreateBuilder().SetTableId(operation.TableId);
                operationResult.SetErrorCode(4); //this query returns error 4 in 7728 -Egris
                operationResult.AddData(
                    bnet.protocol.storage.Cell.CreateBuilder()
                    .SetColumnId(request.OperationsList[0].ColumnId)
                    .SetRowId(request.OperationsList[0].RowId)
                    .SetVersion(1)
                    .Build()
                    );
                results.Add(operationResult.Build());
            }

            var builder = bnet.protocol.storage.ExecuteResponse.CreateBuilder();

            foreach (var result in results)
            {
                builder.AddResults(result);
            }
            return(builder.Build());
        }
Пример #2
0
        private bnet.protocol.storage.ExecuteResponse LoadAccountDigest(bnet.protocol.storage.ExecuteRequest request)
        {
            var builder = bnet.protocol.storage.ExecuteResponse.CreateBuilder();

            var accountDigest = D3.Account.Digest.CreateBuilder().SetVersion(1)
                                .SetLastPlayedHeroId(D3.OnlineService.EntityId.CreateBuilder().SetIdHigh(0).SetIdLow(0).Build())
                                .SetBannerConfiguration(D3.Account.BannerConfiguration.CreateBuilder()
                                                        .SetBackgroundColorIndex(0)
                                                        .SetBannerIndex(0)
                                                        .SetPattern(0)
                                                        .SetPatternColorIndex(0)
                                                        .SetPlacementIndex(0)
                                                        .SetSigilAccent(0)
                                                        .SetSigilMain(0)
                                                        .SetSigilColorIndex(0)
                                                        .SetUseSigilVariant(false)
                                                        .Build())
                                .SetFlags(0)
                                .Build();

            var operationResult = bnet.protocol.storage.OperationResult.CreateBuilder()
                                  .SetTableId(request.OperationsList[0].TableId)
                                  .AddData(
                bnet.protocol.storage.Cell.CreateBuilder()
                .SetColumnId(request.OperationsList[0].ColumnId)
                .SetRowId(request.OperationsList[0].RowId)
                .SetVersion(1)
                .SetData(accountDigest.ToByteString())
                .Build())
                                  .Build();

            builder.AddResults(operationResult);
            return(builder.Build());
        }
Пример #3
0
        private bnet.protocol.storage.ExecuteResponse GameAccountSettings(bnet.protocol.storage.ExecuteRequest request)
        {
            var builder = bnet.protocol.storage.ExecuteResponse.CreateBuilder();

            var operationResult = bnet.protocol.storage.OperationResult.CreateBuilder()
                                  .SetTableId(request.OperationsList[0].TableId)
                                  .AddData(
                bnet.protocol.storage.Cell.CreateBuilder()
                .SetColumnId(request.OperationsList[0].ColumnId)
                .SetRowId(request.OperationsList[0].RowId)
                .Build())
                                  .Build();

            builder.AddResults(operationResult);
            return(builder.Build());
        }
Пример #4
0
        private bnet.protocol.storage.ExecuteResponse GetHeroDigest(bnet.protocol.storage.ExecuteRequest request)
        {
            var op        = request.OperationsList[0];
            var table_id  = op.TableId;
            var column_id = op.ColumnId;
            var row_id    = op.RowId;

            Logger.Debug("table_id.Hash:\n{0}", table_id.Hash.ToByteArray().Dump());
            Logger.Debug("column_id.Hash:\n{0}", column_id.Hash.ToByteArray().Dump());
            Logger.Debug("row_id.Hash:\n{0}", row_id.Hash.ToByteArray().Dump());

            /*try {
             *  var stream = CodedInputStream.CreateInstance(row_id.Hash.ToByteArray());
             *  stream.SkipRawBytes(2);
             *  var tgen=bnet.protocol.toon.ToonHandle.CreateBuilder()
             *      .SetRealm(stream.ReadRawVarint32())
             *      .SetRegion(stream.ReadRawVarint32())
             *      .SetProgram(stream.ReadUInt32()) // "D3\0\0"
             *      .SetId(stream.ReadUInt64())
             *      .Build();
             *  Logger.Debug("generated:\n{0}", tgen.ToByteArray().Dump());
             *  Logger.Debug(tgen.ToString());
             *  //var toonhandle=bnet.protocol.toon.ToonHandle.ParseFrom(eid.ToByteArray());
             *  //Logger.Debug("row_id.hash as handle:\n{0}", toonhandle.ToString());
             * } catch (Exception e) {
             *  Logger.DebugException(e, "row_id");
             * }*/
            var heroDigest = D3.Hero.Digest.ParseFrom(StorageManager.Tables[table_id].Rows[row_id].Cells[column_id].Data);

            var operationResult = bnet.protocol.storage.OperationResult.CreateBuilder()
                                  .SetTableId(request.OperationsList[0].TableId)
                                  .AddData(
                bnet.protocol.storage.Cell.CreateBuilder()
                .SetColumnId(request.OperationsList[0].ColumnId)
                .SetRowId(request.OperationsList[0].RowId)
                .SetVersion(1)
                .SetData(heroDigest.ToByteString())
                .Build()
                ).Build();

            var builder = bnet.protocol.storage.ExecuteResponse.CreateBuilder();

            builder.AddResults(operationResult);
            return(builder.Build());
        }
Пример #5
0
        private bnet.protocol.storage.ExecuteResponse GameAccountSettings(bnet.protocol.storage.ExecuteRequest request)
        {
            var results = new List <bnet.protocol.storage.OperationResult>();

            foreach (var operation in request.OperationsList)
            {
                var operationResult = bnet.protocol.storage.OperationResult.CreateBuilder().SetTableId(operation.TableId);
                operationResult.AddData(
                    bnet.protocol.storage.Cell.CreateBuilder()
                    .SetColumnId(request.OperationsList[0].ColumnId)
                    .SetRowId(request.OperationsList[0].RowId)
                    .Build());
                results.Add(operationResult.Build());
            }

            var builder = bnet.protocol.storage.ExecuteResponse.CreateBuilder();

            foreach (var result in results)
            {
                builder.AddResults(result);
            }
            return(builder.Build());
        }
Пример #6
0
        private bnet.protocol.storage.ExecuteResponse GetHeroDigest(MooNetClient client, bnet.protocol.storage.ExecuteRequest request)
        {
            var results = new List <bnet.protocol.storage.OperationResult>();

            foreach (var operation in request.OperationsList)
            {
                Google.ProtocolBuffers.ByteString data = null;

                // find the requested toons entity-id.
                var stream = new MemoryStream(operation.RowId.Hash.ToByteArray());

                // contains ToonHandle in field form with one unknown field (which is not in message definition):
                // int16 unknown; uint8 realm; uint8 region; uint32 program; uint64 id;
                stream.ReadValueU16();      // unknown
                stream.ReadValueU8();       // realm
                stream.ReadValueU8();       // region
                stream.ReadValueU32(false); // program

                var toonId = stream.ReadValueU64(false);

                if (!client.Account.CurrentGameAccount.Toons.ContainsKey(toonId))
                {
                    Logger.Error("Can't find the requested toon: {0}", toonId);
                    continue;
                }

                var toon = client.Account.CurrentGameAccount.Toons[toonId];

                if (operation.ColumnId.Hash.Equals(HeroDigestColumn))
                {
                    data = toon.Digest.ToByteString();
                }
                else
                {
                    Logger.Warn("Unknown ColumndId requested: {0}", operation.ColumnId.Hash.ToByteArray().HexDump());
                }
                //else if (operation.ColumnId.Hash.Equals(HeroNameColumn))
                //    data = toon.NameText.ToByteString();

                var operationResult = bnet.protocol.storage.OperationResult.CreateBuilder().SetTableId(operation.TableId);
                operationResult.AddData(
                    bnet.protocol.storage.Cell.CreateBuilder()
                    .SetColumnId(request.OperationsList[0].ColumnId)
                    .SetRowId(request.OperationsList[0].RowId)
                    .SetVersion(1)
                    .SetData(data)
                    .Build()
                    );
                results.Add(operationResult.Build());
            }

            var builder = bnet.protocol.storage.ExecuteResponse.CreateBuilder();

            foreach (var result in results)
            {
                builder.AddResults(result);
            }
            return(builder.Build());
        }
Пример #7
0
        public override void Execute(Google.ProtocolBuffers.IRpcController controller, bnet.protocol.storage.ExecuteRequest request, System.Action <bnet.protocol.storage.ExecuteResponse> done)
        {
            Logger.Trace("Execute() {0}", this.Client);
            bnet.protocol.storage.ExecuteResponse response = null;
            switch (request.QueryName)
            {
            case "GetGameAccountSettings":
                response = GameAccountSettings(request);
                break;

            case "LoadAccountDigest":
                response = LoadAccountDigest(Client, request);
                break;

            case "GetHeroDigests":
                response = GetHeroDigest(Client, request);
                break;

            case "GetToonSettings":
                response = GetToonSettings(request);
                break;

            //case "GetAccountProfile":
            //    response = GetAccountProfile(Client, request);
            //    break;
            //case "GetHeroProfiles":
            //    response = GetHeroProfiles(Client, request);
            //    break;
            default:
                Logger.Warn("Unhandled query: {0}", request.QueryName);
                response = bnet.protocol.storage.ExecuteResponse.CreateBuilder().Build();
                break;
            }

            done(response);
        }
Пример #8
0
        private bnet.protocol.storage.ExecuteResponse LoadAccountDigest(MooNetClient client, bnet.protocol.storage.ExecuteRequest request)
        {
            var results = new List <bnet.protocol.storage.OperationResult>();

            foreach (var operation in request.OperationsList)
            {
                var operationResult = bnet.protocol.storage.OperationResult.CreateBuilder().SetTableId(operation.TableId);
                operationResult.AddData(
                    bnet.protocol.storage.Cell.CreateBuilder()
                    .SetColumnId(request.OperationsList[0].ColumnId)
                    .SetRowId(request.OperationsList[0].RowId)
                    .SetVersion(1)
                    .SetData(client.Account.CurrentGameAccount.Digest.ToByteString())
                    .Build());
                results.Add(operationResult.Build());
            }

            var builder = bnet.protocol.storage.ExecuteResponse.CreateBuilder();

            foreach (var result in results)
            {
                builder.AddResults(result);
            }
            return(builder.Build());
        }