예제 #1
0
        private void SetupNetwork()
        {
            netDefs = new NetDefinitions();
            server  = new AsteroidServer(netDefs, Resolution.ToVector2(), 11002);

            client = new NetworkClient(new UDPConnection(
                                           System.Net.IPAddress.Parse((server != null) ? "127.0.0.1" : "122.58.99.13"),
                                           11002, // Change this destination to 12002 to connect to a running NetProxy.
                                           (server != null) ? 11003 : 11002
                                           ));
            client.Connection.Compression = AsteroidServer.NetworkCompression;
            client.Connection.Stats.ByteAggregationPeriodMilliseconds = 100;

            // Note, when using NetProxy with this setup, the Open command should be:
            // open 12002 11003 12003 11002

            incomingPool = new IncomingSyncPool(netDefs, 0);
            outgoingPool = new OutgoingSyncPool(netDefs, 0);
            client.Attach(incomingPool);
            client.Attach(outgoingPool);
            controlVector = new PlayerControl()
            {
                Ready      = true,
                PlayerName = System.Environment.MachineName
            };
            outgoingPool.AddEntity(controlVector);

            client.SetState(NetworkClient.ConnectionState.Open);
        }
예제 #2
0
        internal SynchronisablePool(NetDefinitions netDefs, ushort poolID)
        {
            EntityGenerator = netDefs.entityGenerator;
            PoolID          = poolID;

            SyncHandles = new List <SyncHandle>();
            SyncSlots   = new SyncSlot[DefaultEntityCount];
            Revision    = 0; // TODO: There seems to be a zero revision bug causing skips. Fix this and reset starting revision to 0.

            Context = new SyncContext(this, 0, 0);
        }
예제 #3
0
 public AirlockHostedClient(NetDefinitions netDefs, NetworkClient client, OutgoingSyncPool worldContent)
 {
     Network       = client;
     ReturnContent = new IncomingSyncPool(netDefs, (ushort)AirlockServer.SyncPoolID.ReturnContent);
     ClientContent = new OutgoingSyncPool(netDefs, (ushort)AirlockServer.SyncPoolID.ClientContent);
     ClientContent.LinkedPools.Add(worldContent);
     Network.Attach(ReturnContent);
     Network.Attach(ClientContent);
     Network.SetState(NetworkClient.ConnectionState.Open);
     ClientInfo = new ClientInfo();
     ClientContent.AddEntity(ClientInfo);
 }
예제 #4
0
        public AirlockServer(int port)
        {
            Server = new UDPServer(port);
            Server.IncomingConnectionLimit = MaxPlayers;
            Clients = new List <AirlockHostedClient>();

            NetDefs = new NetDefinitions();
            NetDefs.LoadEntityTypes();
            WorldContent = new OutgoingSyncPool(NetDefs, (ushort)SyncPoolID.WorldContent);

            Entities = new List <Entity>();
            Grid     = MapGrid.StartingMap();

            AddEntity(new DroppedItem(new Vector2(200, -200)));

            foreach (MapRoom room in Grid.Rooms)
            {
                WorldContent.AddEntity(room);
            }
        }
예제 #5
0
        public AsteroidServer(NetDefinitions netdefs, Vector2 boundary, int port)
        {
            NetDefs = netdefs;

            Boundary           = boundary;
            Server             = new UDPServer(port);
            Server.Compression = NetworkCompression;
            MaxPlayers         = 8;

            OutgoingPool   = new OutgoingSyncPool(netdefs, 0);
            Physicals      = new List <Physical>();
            Projectiles    = new List <Projectile>();
            CollisionWorld = new VoltWorld(0, 1.0f);

            Clients = new List <RemoteClient>();

            Context = new ContextToken(this);

            int k = 4;

            for (int i = 0; i < 30 * k; i++)
            {
                AddEntity(NewAsteroid(32));
            }
            for (int i = 0; i < 40 * k; i++)
            {
                AddEntity(NewAsteroid(48));
            }
            for (int i = 0; i < 10 * k; i++)
            {
                AddEntity(NewAsteroid(56));
            }

            OutgoingPool.AddEntity(serverReport);

            LastTimestamp = 0;
            Random        = new Random((int)System.DateTime.UtcNow.ToBinary());
        }
예제 #6
0
        public AirlockClient(IPAddress address, int destport, int srcport)
        {
            Network = new NetworkClient(new UDPConnection(address, destport, srcport));

            NetDefinitions netDefs = new NetDefinitions();

            netDefs.LoadEntityTypes();

            WorldContent  = new IncomingSyncPool(netDefs, (ushort)AirlockServer.SyncPoolID.WorldContent);
            ReturnContent = new OutgoingSyncPool(netDefs, (ushort)AirlockServer.SyncPoolID.ReturnContent);
            ClientContent = new IncomingSyncPool(netDefs, (ushort)AirlockServer.SyncPoolID.ClientContent);
            ClientContent.LinkedPools.Add(WorldContent);
            Network.Attach(WorldContent);
            Network.Attach(ReturnContent);
            Network.Attach(ClientContent);

            Network.SetState(NetworkClient.ConnectionState.Open);
            LocalPlayer = new LocalPlayer();
            ReturnContent.AddEntity(LocalPlayer);

            Inputs = new ClientInputs();

            Grid = new MapGrid();
        }
예제 #7
0
 public IncomingSyncPool(NetDefinitions netDefs, ushort poolID) : base(netDefs, poolID)
 {
 }