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); }
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)) }); } }
void StartTearDown(ServerConnectionComponent conn) { conn.state = State.TearDown; SendFinPacket(conn); }