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)); }
// GetCount(SourceFlag flag) -> u32 public ResultCode GetCount(ServiceCtx context) { SourceFlag flag = (SourceFlag)context.RequestData.ReadInt32(); context.ResponseData.Write(GetCount(flag)); return(ResultCode.Success); }
public bool IsUpdated(DatabaseSessionMetadata metadata, SourceFlag flag) { if (flag.HasFlag(SourceFlag.Database)) { return(_miiDatabase.IsUpdated(metadata)); } return(false); }
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)); }
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)); }
// 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); }
// 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); }
/// <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; }
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); }
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); }
// 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); }
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); }
protected abstract ResultCode UpdateLatest1(StoreData oldStoreData, SourceFlag flag, out StoreData newStoreData);
protected abstract ResultCode Get3(SourceFlag flag, out int count, Span <StoreData> elements);
protected abstract ResultCode UpdateLatest(CharInfo oldCharInfo, SourceFlag flag, out CharInfo newCharInfo);
protected abstract ResultCode Get1(SourceFlag flag, out int count, Span <CharInfo> elements);
protected abstract uint GetCount(SourceFlag flag);
protected abstract bool IsUpdated(SourceFlag flag);
protected override bool IsUpdated(SourceFlag flag) { return(_database.IsUpdated(_metadata, flag)); }
protected override uint GetCount(SourceFlag flag) { return(_database.GetCount(_metadata, flag)); }
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); }
protected override ResultCode Get1(SourceFlag flag, out int count, Span <CharInfo> elements) { return(_database.Get(_metadata, flag, out count, elements)); }
protected override ResultCode UpdateLatest(CharInfo oldCharInfo, SourceFlag flag, out CharInfo newCharInfo) { newCharInfo = default; return(_database.UpdateLatest(_metadata, oldCharInfo, flag, newCharInfo)); }