Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }