Пример #1
0
        void OnLoginReceived(Packet.Login login, NetPeer peer)
        {
            try
            {
                ValidatePacket(login);
            } catch (ArgumentException ex)
            {
                Console.WriteLine(String.Format("Failed to validate packet in OnLoginReceived from {0}: {1}", peer.EndPoint, ex.ToString()));
                return;
            }

            if (_connectedPlayers.ContainsKey(login.userName))
            {
                Console.WriteLine("Player {0} is already logged in.", login.userName);
                return;
            }

            Console.WriteLine("Player {0} logged in.", login.userName);
            _connectedPlayers[login.userName] = new PlayerState(login.userName, peer);
            ObjectSchema.Player player = _db.GetPlayer(login.userName);

            // Send player's initial state.
            peer.Send(Write(new Packet.LoginInitialPlayerState {
                userName = player.userName, xp = player.xp
            }), DeliveryMethod.ReliableOrdered);

            // Send player's inventory to them.
            SendInventoryToPlayer(_connectedPlayers[login.userName]);

            //Send Current time to player
            peer.Send(this.Write(new Packet.CurrentServerTime {
                time = GameTime.Instance().TickStartTime()
            }), DeliveryMethod.ReliableSequenced);

            // Send all mineable objects to player.
            List <ObjectSchema.Mineable> allMinables = _db.ReadAllObjects <ObjectSchema.Mineable>(ObjectSchema.ObjectTypes.IObjectType.MINEABLE);

            foreach (var mineable in allMinables)
            {
                peer.Send(this.Write(new Packet.PlaceMinableObject {
                    mineable = mineable
                }), DeliveryMethod.ReliableSequenced);
            }

            List <ObjectSchema.Plantable> allPlantables = _db.ReadAllObjects <ObjectSchema.Plantable>(ObjectSchema.ObjectTypes.IObjectType.PLANTABLE);

            foreach (var plantable in allPlantables)
            {
                peer.Send(this.Write(new Packet.PlacePlantableObject {
                    plantable = plantable
                }), DeliveryMethod.ReliableSequenced);
            }
        }
Пример #2
0
        public void WritePlayer(ObjectSchema.Player player)
        {
            var idResult = _bucket.Increment("PlayerIdCounter");

            if (!idResult.Success)
            {
                throw new Exception("Failed to get next increment for UserItemInventoryCounter.");
            }

            var document = new Document <dynamic> {
                Id      = "player" + idResult.Value.ToString(),
                Content = player
            };
            var upsert = _bucket.Upsert(document);

            if (!upsert.Success)
            {
                throw new Exception(String.Format("Upserting item failed for user {0}", player.userName));
            }
        }
Пример #3
0
        public ObjectSchema.Player GetPlayer(string userName)
        {
            var queryRequest = new QueryRequest()
                               .Statement("SELECT meta(`FarmWorld`).id, * FROM `FarmWorld` WHERE userName=$1 AND type='PLAYER'")
                               .AddPositionalParameter(userName);
            var result = _bucket.Query <dynamic>(queryRequest);

            if (!result.Success)
            {
                throw new Exception(String.Format("GetPlayer initial queryRequest failed: {0}", result.Status));
            }
            if (result.Rows.Count > 1)
            {
                throw new Exception(String.Format("GetPlayer initial query returned more than 1 row for user {0}.", userName));
            }

            if (result.Rows.Count == 0)    // Write new empty player.
            {
                WritePlayer(new ObjectSchema.Player {
                    userName = userName, xp = 0
                });
                return(new ObjectSchema.Player {
                    userName = userName, xp = 0
                });
            }
            else
            {
                var ret = new ObjectSchema.Player {
                    userName = userName, xp = 0
                };
                var document = result.Rows[0].Document;
                ret.FromJson(document.Content, ref ret);
                ret.id = document.Id;

                return(ret);
            }
        }