コード例 #1
0
ファイル: DatabaseImpl.cs プロジェクト: piyachetk/Ryujinx
        public ResultCode Get <T>(DatabaseSessionMetadata metadata, SourceFlag flag, out int count, Span <T> elements) where T : struct, IElement
        {
            count = 0;

            if (!flag.HasFlag(SourceFlag.Database))
            {
                return(GetDefault(flag, ref count, elements));
            }

            int databaseCount = _miiDatabase.GetCount(metadata);

            for (int i = 0; i < databaseCount; i++)
            {
                if (count >= elements.Length)
                {
                    return(ResultCode.BufferTooSmall);
                }

                _miiDatabase.Get(metadata, i, out StoreData storeData);

                elements[count] = default;
                elements[count].SetFromStoreData(storeData);
                elements[count].SetSource(Source.Database);

                count++;
            }

            return(GetDefault(flag, ref count, elements));
        }
コード例 #2
0
        // GetCount(SourceFlag flag) -> u32
        public ResultCode GetCount(ServiceCtx context)
        {
            SourceFlag flag = (SourceFlag)context.RequestData.ReadInt32();

            context.ResponseData.Write(GetCount(flag));

            return(ResultCode.Success);
        }
コード例 #3
0
ファイル: DatabaseImpl.cs プロジェクト: piyachetk/Ryujinx
        public bool IsUpdated(DatabaseSessionMetadata metadata, SourceFlag flag)
        {
            if (flag.HasFlag(SourceFlag.Database))
            {
                return(_miiDatabase.IsUpdated(metadata));
            }

            return(false);
        }
コード例 #4
0
        protected override ResultCode Get2(SourceFlag flag, out int count, Span <StoreDataElement> elements)
        {
            if (!_isSystem)
            {
                count = -1;

                return(ResultCode.PermissionDenied);
            }

            return(_database.Get(_metadata, flag, out count, elements));
        }
コード例 #5
0
        protected override ResultCode UpdateLatest1(StoreData oldStoreData, SourceFlag flag, out StoreData newStoreData)
        {
            newStoreData = default;

            if (!_isSystem)
            {
                return(ResultCode.PermissionDenied);
            }

            return(_database.UpdateLatest(_metadata, oldStoreData, flag, newStoreData));
        }
コード例 #6
0
        // UpdateLatest1(nn::mii::StoreData old_store_data, SourceFlag flag) -> nn::mii::StoreData
        public ResultCode UpdateLatest1(ServiceCtx context)
        {
            StoreData  oldStoreData = context.RequestData.ReadStruct <StoreData>();
            SourceFlag flag         = (SourceFlag)context.RequestData.ReadInt32();

            ResultCode result = UpdateLatest1(oldStoreData, flag, out StoreData newStoreData);

            context.ResponseData.WriteStruct(newStoreData);

            return(result);
        }
コード例 #7
0
        // UpdateLatest(nn::mii::CharInfo old_char_info, SourceFlag flag) -> nn::mii::CharInfo
        public ResultCode UpdateLatest(ServiceCtx context)
        {
            CharInfo   oldCharInfo = context.RequestData.ReadStruct <CharInfo>();
            SourceFlag flag        = (SourceFlag)context.RequestData.ReadInt32();

            ResultCode result = UpdateLatest(oldCharInfo, flag, out CharInfo newCharInfo);

            context.ResponseData.WriteStruct(newCharInfo);

            return(result);
        }
コード例 #8
0
 /// <summary>
 /// 初始化
 /// </summary>
 /// <param name="serviceId">当前服务ID</param>
 /// <param name="connectionId">服务器链接标识</param>
 /// <param name="eventName">事件名</param>
 /// <param name="loginUid">当前使用的QQ号</param>
 /// <param name="time">连接时间</param>
 /// <param name="sourceType">来源</param>
 internal BaseSoraEventArgs(Guid serviceId, Guid connectionId, string eventName,
                            long loginUid, long time, SourceFlag sourceType)
 {
     SoraApi              = new SoraApi(serviceId, connectionId);
     ServiceGuid          = serviceId;
     ConnId               = connectionId;
     EventName            = eventName;
     LoginUid             = loginUid;
     TimeStamp            = time;
     Time                 = time.ToDateTime();
     IsContinueEventChain = true;
     SourceType           = sourceType;
 }
コード例 #9
0
 internal BaseMessageEventArgs(Guid serviceId, Guid connectionId, string eventName,
                               BaseObMessageEventArgs msg, SourceFlag source) :
     base(serviceId, connectionId, eventName, msg.SelfId, msg.Time, source)
 {
     //将api消息段转换为sorasegment
     Message = new MessageContext(serviceId, connectionId, msg.MessageId, msg.RawMessage,
                                  msg.MessageList.ToMessageBody(),
                                  msg.Time, msg.Font, null);
     Sender        = new User(serviceId, connectionId, msg.UserId);
     IsSelfMessage = msg.UserId == msg.SelfId;
     IsSuperUser   = msg.UserId is not 0 or - 1 &&
                     StaticVariable.ServiceConfigs[serviceId].SuperUsers.Any(id => id == msg.UserId);
 }
コード例 #10
0
ファイル: DatabaseImpl.cs プロジェクト: piyachetk/Ryujinx
        public uint GetCount(DatabaseSessionMetadata metadata, SourceFlag flag)
        {
            int count = 0;

            if (flag.HasFlag(SourceFlag.Default))
            {
                count += DefaultMii.TableLength;
            }

            if (flag.HasFlag(SourceFlag.Database))
            {
                count += _miiDatabase.GetCount(metadata);
            }

            return((uint)count);
        }
コード例 #11
0
        // Get1(SourceFlag flag) -> (s32 count, buffer<nn::mii::CharInfo, 6>)
        public ResultCode Get1(ServiceCtx context)
        {
            SourceFlag flag = (SourceFlag)context.RequestData.ReadInt32();

            IpcBuffDesc outputBuffer = context.Request.ReceiveBuff[0];

            Span <CharInfo> elementsSpan = CreateSpanFromBuffer <CharInfo>(context, outputBuffer, true);

            ResultCode result = Get1(flag, out int count, elementsSpan);

            elementsSpan = elementsSpan.Slice(0, count);

            context.ResponseData.Write(count);

            WriteSpanToBuffer(context, outputBuffer, elementsSpan);

            return(result);
        }
コード例 #12
0
ファイル: DatabaseImpl.cs プロジェクト: piyachetk/Ryujinx
        private ResultCode GetDefault <T>(SourceFlag flag, ref int count, Span <T> elements) where T : struct, IElement
        {
            if (!flag.HasFlag(SourceFlag.Default))
            {
                return(ResultCode.Success);
            }

            for (uint i = 0; i < DefaultMii.TableLength; i++)
            {
                if (count >= elements.Length)
                {
                    return(ResultCode.BufferTooSmall);
                }

                elements[count] = default;
                elements[count].SetFromStoreData(StoreData.BuildDefault(_utilityImpl, i));
                elements[count].SetSource(Source.Default);

                count++;
            }

            return(ResultCode.Success);
        }
コード例 #13
0
 protected abstract ResultCode UpdateLatest1(StoreData oldStoreData, SourceFlag flag, out StoreData newStoreData);
コード例 #14
0
 protected abstract ResultCode Get3(SourceFlag flag, out int count, Span <StoreData> elements);
コード例 #15
0
 protected abstract ResultCode UpdateLatest(CharInfo oldCharInfo, SourceFlag flag, out CharInfo newCharInfo);
コード例 #16
0
 protected abstract ResultCode Get1(SourceFlag flag, out int count, Span <CharInfo> elements);
コード例 #17
0
 protected abstract uint GetCount(SourceFlag flag);
コード例 #18
0
 protected abstract bool IsUpdated(SourceFlag flag);
コード例 #19
0
 protected override bool IsUpdated(SourceFlag flag)
 {
     return(_database.IsUpdated(_metadata, flag));
 }
コード例 #20
0
 protected override uint GetCount(SourceFlag flag)
 {
     return(_database.GetCount(_metadata, flag));
 }
コード例 #21
0
ファイル: DatabaseImpl.cs プロジェクト: piyachetk/Ryujinx
        public ResultCode UpdateLatest <T>(DatabaseSessionMetadata metadata, IStoredData <T> oldMiiData, SourceFlag flag, IStoredData <T> newMiiData) where T : unmanaged
        {
            if (!flag.HasFlag(SourceFlag.Database))
            {
                return(ResultCode.NotFound);
            }

            if (metadata.IsInterfaceVersionSupported(1) && !oldMiiData.IsValid())
            {
                return(oldMiiData.InvalidData);
            }

            ResultCode result = _miiDatabase.FindIndex(metadata, out int index, oldMiiData.CreateId);

            if (result == ResultCode.Success)
            {
                _miiDatabase.Get(metadata, index, out StoreData storeData);

                if (storeData.Type != oldMiiData.Type)
                {
                    return(ResultCode.NotFound);
                }

                newMiiData.SetFromStoreData(storeData);

                if (oldMiiData == newMiiData)
                {
                    return(ResultCode.NotUpdated);
                }
            }

            return(result);
        }
コード例 #22
0
 protected override ResultCode Get1(SourceFlag flag, out int count, Span <CharInfo> elements)
 {
     return(_database.Get(_metadata, flag, out count, elements));
 }
コード例 #23
0
        protected override ResultCode UpdateLatest(CharInfo oldCharInfo, SourceFlag flag, out CharInfo newCharInfo)
        {
            newCharInfo = default;

            return(_database.UpdateLatest(_metadata, oldCharInfo, flag, newCharInfo));
        }