예제 #1
0
 protected RailRoom(RailResource resource, RailConnection connection)
 {
     Resource        = resource;
     this.connection = connection;
     entities        = new Dictionary <EntityId, RailEntityBase>(EntityId.CreateEqualityComparer());
     Tick            = Tick.INVALID;
 }
예제 #2
0
 protected RailConnection(RailRegistry registry)
 {
     Resource    = new RailResource(registry);
     Interpreter = new RailInterpreter();
     Room        = null;
     hasStarted  = false;
 }
예제 #3
0
 public static void Decode(
     this RailPacketIncoming packet,
     RailResource resource,
     RailBitBuffer buffer)
 {
     packet.Decode(resource, resource, resource, buffer);
 }
예제 #4
0
 public static void Encode(
     this RailPacketOutgoing packet,
     RailResource resource,
     RailBitBuffer buffer)
 {
     packet.Encode(resource, resource, buffer);
 }
예제 #5
0
        public RailServerRoom(RailResource resource, RailServer server) : base(resource, server)
        {
            ToUpdate = new List <RailEntityServer>();
            ToRemove = new List <RailEntityServer>();

            Clients     = new HashSet <RailPeer>();
            this.server = server;
        }
예제 #6
0
        /// <summary>
        ///     Creates a new entity with its corresponding state.
        /// </summary>
        /// <param name="resource"></param>
        /// <param name="factoryType"></param>
        /// <returns></returns>
        public static RailEntityBase Create(RailResource resource, int factoryType)
        {
            RailEntityBase entity = resource.CreateEntity(factoryType);

            entity.CommandCreator = resource;
            entity.EventCreator   = resource;
            entity.InitState(resource, resource.CreateState(factoryType));
            return(entity);
        }
예제 #7
0
        public void SendPacket(RailResource resource, IRailNetPeer peer, RailPacketOutgoing packet)
        {
            bitBuffer.Clear();
            packet.Encode(resource, bitBuffer);
            int length = bitBuffer.Store(bytes);

            RailDebug.Assert(length <= RailConfig.PACKCAP_MESSAGE_TOTAL);
            peer.SendPayload(new ArraySegment <byte>(bytes, 0, length));
        }
예제 #8
0
 public RailServerPeer(
     RailResource resource,
     IRailNetPeer netPeer,
     RailInterpreter interpreter) : base(
         resource,
         netPeer,
         ExternalEntityVisibility.Scoped,
         RailConfig.CLIENT_SEND_RATE,
         interpreter)
 {
 }
예제 #9
0
        public RailEvent Clone(RailResource resource)
        {
            RailEvent clone = resource.CreateEvent(FactoryType);

            clone.EventId  = EventId;
            clone.Attempts = Attempts;
            clone.Room     = Room;
            clone.Sender   = Sender;
            clone.DataSerializer.SetDataFrom(DataSerializer);
            return(clone);
        }
예제 #10
0
 public RailClientPeer(
     RailResource resource,
     IRailNetPeer netPeer,
     RailInterpreter interpreter) : base(
         resource,
         netPeer,
         ExternalEntityVisibility.All,
         RailConfig.SERVER_SEND_RATE,
         interpreter)
 {
     localView = new RailView();
 }
예제 #11
0
        public RailClientRoom(RailResource resource, RailClient client) : base(resource, client)
        {
            eventCreator = resource;
            ToUpdate     = new List <RailEntityClient>();
            ToRemove     = new List <RailEntityClient>();

            IEqualityComparer <EntityId> entityIdComparer = EntityId.CreateEqualityComparer();

            pendingEntities = new Dictionary <EntityId, RailEntityClient>(entityIdComparer);
            knownEntities   = new Dictionary <EntityId, RailEntityClient>(entityIdComparer);
            localPeer       = new RailController(resource, ExternalEntityVisibility.All, null);
            this.client     = client;
        }
예제 #12
0
        protected RailPeer(
            RailResource resource,
            IRailNetPeer netPeer,
            ExternalEntityVisibility visibility,
            uint remoteSendRate,
            RailInterpreter interpreter,
            RailPacketIncoming reusableIncoming,
            RailPacketOutgoing reusableOutgoing) : base(resource, visibility, netPeer)
        {
            Resource         = resource;
            RemoteClock      = new RailClock(remoteSendRate);
            this.interpreter = interpreter;

            outgoingEvents        = new Queue <RailEvent>();
            this.reusableIncoming = reusableIncoming;
            this.reusableOutgoing = reusableOutgoing;
            lastQueuedEventId     = SequenceId.Start.Next;
            eventHistory          = new RailHistory(RailConfig.HISTORY_CHUNKS);

            LocalTick = Tick.START;
            netPeer.PayloadReceived += OnPayloadReceived;
        }
예제 #13
0
 public RailEntityBase ProduceEntity(RailResource resource)
 {
     return(RailEntityBase.Create(resource, state.FactoryType));
 }