Example #1
0
 void SendFinPacket(ServerConnectionComponent conn)
 {
     ctx.CreateEntity()
     .AddComponent(NetworkComponentsLookup.SendPacket, new SendPacketComponent {
         target = conn.clientEP,
         packet = new Packet(PacketType.Fin, new byte[0])
     });
 }
    public void ReplaceConnectionEnd(ServerConnectionComponent newConn)
    {
        var index     = NetworkComponentsLookup.ConnectionEnd;
        var component = CreateComponent <ConnectionEndComponent>(index);

        component.conn = newConn;
        ReplaceComponent(index, component);
    }
    public void AddConnectionEstablished(ServerConnectionComponent newConn)
    {
        var index     = NetworkComponentsLookup.ConnectionEstablished;
        var component = CreateComponent <ConnectionEstablishedComponent>(index);

        component.conn = newConn;
        AddComponent(index, component);
    }
Example #4
0
    protected override void Execute(List <NetworkEntity> entities)
    {
        var connDict = new Dictionary <IPEndPoint, ServerConnectionComponent>();

        foreach (var sg in serverConnectionGroup.GetEntities())
        {
            var comp = sg.serverConnection;
            connDict.Add(comp.clientEP, comp);
        }

        var connInfo = connInfoGroup.GetSingleEntity().serverConnectionInfo;

        foreach (var entity in entities)
        {
            var comp = entity.recvPacket;
            if (connDict.ContainsKey(comp.source))
            {
                continue;
            }

            ServerConnectionComponent serverConn;
            connDict.TryGetValue(comp.source, out serverConn);

            // Start new ServerConnection
            if (serverConn == null)
            {
                serverConn                = new ServerConnectionComponent();
                serverConn.clientEP       = comp.source;
                serverConn.playerMetadata = new PlayerMetadata();

                using (var reader = new BinaryReader(
                           new MemoryStream(comp.packet.data))) {
                    serverConn.playerMetadata.ReadBytes(reader);
                }

                ctx.CreateEntity()
                .AddComponent(NetworkComponentsLookup.ServerConnection, serverConn);

                var e = ctx.CreateEntity();
                e.AddConnectionStart(serverConn);
                e.isCleanup = true;
            }

            var playerID = connInfo.currentPlayerID++;

            // Send SyncAck packet to client
            ctx.CreateEntity()
            .AddComponent(NetworkComponentsLookup.SendPacket, new SendPacketComponent {
                target = comp.source,
                packet = new Packet(PacketType.SyncAck, BitConverter.GetBytes(playerID))
            });
        }
    }
Example #5
0
 void StartTearDown(ServerConnectionComponent conn)
 {
     conn.state = State.TearDown;
     SendFinPacket(conn);
 }