Esempio n. 1
0
    public void CheckReceived()
    {
        if (received.Length >= length)
        {
            var command = ITell.FromStream(received, length);
            switch (command)
            {
            case TellClient.SetWorld c:
                var sys = c.sys;

                AIShip ai       = null;
                var    playerId = client.playerMain?.playerShip?.id;
                if (playerId.HasValue && client.entityLookup.TryGetValue(playerId.Value, out var en))
                {
                    ai = en as AIShip;
                }
                ai ??= sys.entities.all.OfType <AIShip>().FirstOrDefault();
                if (ai != null)
                {
                    lock (client.World) {
                        client.World = sys;
                    }
                    client.removed = ai;
                    sys.RemoveEntity(ai);
                    var playerShip = new PlayerShip(new Player(client.prev.settings), ai.ship, ai.sovereign);
                    playerShip.mortalChances = 0;
                    sys.AddEntity(playerShip);
                    sys.UpdatePresent();
                    client.SetPlayerMain(new PlayerMain(client.Width, client.Height,
                                                        new Profile(), playerShip));
                    TellServer(new TellServer.AssumePlayerShip()
                    {
                        shipId = ai.id
                    });
                }
                break;

            case TellClient.SetCamera c:
                client.camera = c.pos;
                break;

            case TellClient.SyncSharedState c:
                foreach (var state in c.entities)
                {
                    if (client.entityLookup.TryGetValue(state.id, out Entity e))
                    {
                        e.SetSharedState(state);
                    }
                }
                break;
            }

            received.Close();
        }
    }
Esempio n. 2
0
    protected override void OnReceived(byte[] buffer, long offset, long size)
    {
        var s = Encoding.UTF8.GetString(buffer, (int)offset, (int)size);
        var m = ITell.Prefix(s);

        if (m.Success)
        {
            received = new MemoryStream();
            var l = m.Groups["length"].Value;
            length = int.Parse(l);
            if (s.Length > l.Length)
            {
                var b = Encoding.UTF8.GetBytes(l);
                OnReceived(buffer, offset + b.LongLength, size - b.LongLength);
            }
        }
        else if (received != null)
        {
            received.Write(buffer, (int)offset, (int)size);
            CheckReceived();
        }
    }
Esempio n. 3
0
    public void CheckReceived()
    {
        if (received.Length >= length)
        {
            var command = ITell.FromStream(received, length);
            switch (command)
            {
            case TellServer.AssumePlayerShip c:
                Handle(c);
                break;

            case TellServer.LeavePlayerShip:
                RemovePlayer();
                break;

            case TellServer.ControlPlayerShip c:
                Handle(c);
                break;
            }

            received.Close();
        }
    }