internal void RestoreClientStateObject(GameClient client, ClientObjectStateWrapper objectStateWrapper) { CreateClientObject(client, objectStateWrapper.TypeName, objectStateWrapper.Name); foreach (var item in objectStateWrapper.Fields) { ApplyClientObjectValue(client, objectStateWrapper.Name, item.Name, item.Value); } }
internal void SaveState(GameClient client) { List <ClientObjectStateWrapper> ClientObjects = new List <ClientObjectStateWrapper>(); List <ClientObjectStateWrapper> ClientState = new List <ClientObjectStateWrapper>(); foreach (var item in server.StateManager.ClientStates.FirstOrDefault(cs => cs.Client == client).State.Objects.Values) { ClientObjectStateWrapper objectWrapper = new ClientObjectStateWrapper() { Name = item.Name, AutoCreateObject = item.AutoCreateObject, Known = item.Known, Sent = item.Sent, TypeName = item.Type.AssemblyQualifiedName, Fields = item.Fields.Values.Select(f => new FieldStateWrapper() { Known = f.Known, Name = f.Name, Sent = f.Sent, Value = f.Value }).ToList() }; ClientState.Add(objectWrapper); } foreach (var item in server.GameLogicProcessor.ClientNetworkedObjects.Values.Where(co => co.Client == client)) { ClientObjectStateWrapper objectWrapper = new ClientObjectStateWrapper() { Name = item.Name, AutoCreateObject = item.AutoCreateObject, TypeName = item.OriginalObject.GetType().ToString(), Fields = item.Fields.Select((f, index) => { Object oValue = f.GetValue(item.OriginalObject); return(new FieldStateWrapper() { Name = index.ToString(), Value = (oValue != null ? oValue.ToString() : null) }); }).ToList() }; ClientObjects.Add(objectWrapper); } ClientStateWrapper stateWrapper = new ClientStateWrapper(ClientState, ClientObjects); storageEngine.SaveState(client.UserId, stateWrapper); }