示例#1
0
        public void OnLogin(LoginPacket packet)
        {
            var client = ServerTcpHandler.GetClient(packet.ClientId);

            try
            {
                var user = AccountService.Login(packet.Login, packet.Password);
                Log.Info("Sending Login Response");

                client.Send(new LoginResponsePacket()
                {
                    SessionId = user.SessionId,
                    UserId    = user.UserId,
                    xLocation = user.X,
                    yLocation = user.Y
                });

                ServerEvents.Call(new PlayerLoginEvent()
                {
                    Player = user,
                    Client = client
                });
            }
            catch (AccountError e)
            {
                Log.Info("Sending Login Error");
                client.Send(new DialogPacket()
                {
                    Message = e.ErrorMessage
                });
            }
        }
示例#2
0
        [EventMethod] // When client finishes updating assets
        public void OnAssetReady(AssetsReadyPacket packet)
        {
            var player = Server.GetPlayer(packet.UserId);

            if (player != null)
            {
                player.AssetsReady = true;
            }

            var client = ServerTcpHandler.GetClient(packet.ClientId);

            // make the player itself appear
            client.Send(new PlayerPacket()
            {
                Name        = player.Login,
                SpriteIndex = 2,
                UserId      = player.UserId,
                X           = player.X,
                Y           = player.Y,
                Speed       = player.speed
            });

            // update chunks for that player
            ChunkProvider.CheckChunks(player);
        }
示例#3
0
        [EventMethod] // When client finishes updating assets
        public void OnAssetReady(AssetsReadyPacket packet)
        {
            var players = Server.Players;
            var player  = Server.GetPlayer(packet.UserId);

            if (player != null)
            {
                player.AssetsReady = true;
            }

            var client = ServerTcpHandler.GetClient(packet.ClientId);

            // update chunks for that player
            ChunkProvider.CheckChunks(player);

            var playerPacket = player.ToPacket();

            // make the player itself appear
            client.Send(playerPacket);

            // to track the entity spawning caches etc
            Server.Events.Call(new EntitySpawnEvent()
            {
                Entity   = player,
                Position = player.Position
            });

            // to handle packets when a player joins
            Server.Events.Call(new PlayerJoinEvent()
            {
                Player = player
            });
        }
示例#4
0
 public void OnAsset(AssetPacket packet)
 {
     // if client doesnt have the asset we gotta send it
     if (packet.HaveIt == false)
     {
         var assetType = packet.AssetType;
         var asset     = AssetLoader.LoadedAssets.GetAsset(packet.AssetType, packet.ResquestedImageName);
         var bytes     = asset.ImageData;
         packet.Asset = bytes;
         ServerTcpHandler.GetClient(packet.ClientId).Send(packet);
     }
 }
        public void OnLogin(LoginPacket packet)
        {
            var client = ServerTcpHandler.GetClient(packet.ClientId);

            try
            {
                // Check if already is online
                string userId = LoginDao.GetUserId(packet.Login);
                var    player = Server.GetPlayer(userId);
                if (player != null)
                {
                    client.Send(new DialogPacket()
                    {
                        Title   = "Error",
                        Message = "Account Already Online"
                    });
                    return;
                }

                var user = AccountService.Login(packet.Login, packet.Password);
                Log.Info("Sending Login Response");

                client.Send(new LoginResponsePacket()
                {
                    SessionId = user.SessionId,
                    UserId    = user.UserId,
                    xLocation = user.X,
                    yLocation = user.Y
                });

                client.Authenticated = true;

                Server.Events.Call(new PlayerLoggedInEvent()
                {
                    Player = user,
                    Client = client
                });

                AssetListener.DownloadAssets(client);
            }
            catch (AccountError e)
            {
                Log.Info("Sending Login Error");
                client.Send(new DialogPacket()
                {
                    Title   = "Acount Error",
                    Message = e.ErrorMessage
                });
            }
        }
示例#6
0
 public Server(ServerStartConfig config)
 {
     PORT      = config.Port;
     _instance = this;
     Events?.Clear();
     Events         = new ServerEvents();
     CommandHandler = new CommandHandler();
     TcpHandler     = new ServerTcpHandler();
     AssetLoader.LoadServerAssets();
     Map = AssetLoader.LoadMapFromFile(config.MapName);
     if (!config.DisableSpawners)
     {
         Map.LoadAllSpawners();
     }
 }
示例#7
0
 public void OnAsset(AssetPacket packet)
 {
     // if client doesnt have the asset we gotta send it
     if (packet.HaveIt == false)
     {
         byte[] bytes = null;
         if (packet.AssetType == AssetType.TILESET)
         {
             bytes = Server.Map.Tilesets[packet.ResquestedImageName];
         }
         else if (packet.AssetType == AssetType.SPRITE)
         {
             bytes = MapLoader.LoadImageData(packet.ResquestedImageName);
         }
         packet.Asset = bytes;
         ServerTcpHandler.GetClient(packet.ClientId).Send(packet);
     }
 }
示例#8
0
    public void TestSimpleConnections()
    {
        // Starting the Server
        var server = new ServerTcpHandler();

        server.StartListening(8888);

        int numberOfClients = 3;

        // Connecting a client to the server
        for (var x = 0; x < numberOfClients; x++)
        {
            var client = new ConnectedClientTcpHandler(new TcpClient("localhost", 8888));
        }

        // Wait for all the connections
        Thread.Sleep(1000);

        Assert.AreEqual(numberOfClients, ServerTcpHandler.ConnectedSockets());
    }
示例#9
0
 public void StartListeningForPackets()
 {
     TcpHandler = new ServerTcpHandler();
     TcpHandler.StartListening(PORT);
     _running = true;
 }