private void Sock_OnPacketsReceived(IPacketSend arg1, Queue <BasePacket> listOfPackets) { // all of these boolean checks should be replaced by a Strategy if (isBoundToGateway == true) { if (isLoggedIn == true) { HandleNormalPackets(listOfPackets); } else { foreach (var packet in listOfPackets) { Console.WriteLine("normal packet received {0} .. isLoggedIn = false", packet.PacketType); LoginCredentialValid lcr = packet as LoginCredentialValid; if (lcr != null) { LoginClientReady temp = (LoginClientReady)IntrepidSerialize.TakeFromPool(PacketType.LoginClientReady); Send(temp); ClientGameInfoResponse cgir = (ClientGameInfoResponse)IntrepidSerialize.TakeFromPool(PacketType.ClientGameInfoResponse); cgir.GameId = (int)applicationId; Send(cgir); isLoggedIn = lcr.isValid; } /* if (localPlayer.entityId == 0)// until we are assigned an entity id, we can't do much * { * EntityPacket ep = packet as EntityPacket; * if (ep != null) * { * localPlayer.entityId = ep.entityId; * } * }*/ numPacketsReceived++; } } } else { foreach (var packet in listOfPackets) { numPacketsReceived++; if (packet is ServerIdPacket) { ServerIdPacket id = packet as ServerIdPacket; if (id != null && id.Type == ServerIdPacket.ServerType.Gateway) { isBoundToGateway = true; break; } } } } }
private void NotifyEndpoint_ServerId(ConnectionState connection) { ServerIdPacket packet = (ServerIdPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerIdPacket); packet.Type = ServerIdPacket.ServerType.Gateway; packet.MapId = 0; packet.Id = 0; connection.Send(packet); }
public void ConnectMock() { ServerIdPacket serverId = (ServerIdPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerIdPacket); serverId.Type = ServerIdPacket.ServerType.Game; serverId.Id = (int)1234; serverId.MapId = 1; deserializedPackets.Add(serverId); //controller.Send(serverId); }
private void Sock_OnConnect(IPacketSend sender) { if (gatewaySocket != sender) { return; } ServerIdPacket serverId = (ServerIdPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerIdPacket); serverId.Type = ServerIdPacket.ServerType.Game; serverId.Id = applicationId; serverId.MapId = 1; sender.Send(serverId); }
public override void HandlePackets(Queue <BasePacket> listOfPackets) { server.numPacketsReceived += listOfPackets.Count; foreach (var packet in listOfPackets) { if (packet is ServerIdPacket) { ServerIdPacket id = packet as ServerIdPacket; if (id != null && id.Type == ServerIdPacket.ServerType.Gateway) { server.hasConnectedToGateway = true; server.CurrentPacketHandling = server.BoundPacketHandler; break; } } } }
private void Socket_OnPacketsReceived(IPacketSend socket, Queue <BasePacket> receivedPackets) { numPacketsReceived += receivedPackets.Count; // Look for a server id packet if we've only just connected if (!isBoundToGateway) { var packet = receivedPackets.Dequeue(); if (packet is ServerIdPacket) { ServerIdPacket id = packet as ServerIdPacket; if (id != null && id.Type == ServerIdPacket.ServerType.Gateway) { isBoundToGateway = true; OnConnect?.Invoke(); } } else { socket.Disconnect(); Console.Error.WriteLine("Unexpected packet type, disconnecting: {0}", packet.PacketType); return; } } // Look for a login credentials valid packet if we've tried to log in else if (!IsLoggedIn && hasSentCredentials) { var packet = receivedPackets.Dequeue(); if (packet is LoginCredentialValid) { HandleLoginCredentialsValidPacket(packet as LoginCredentialValid); } else { socket.Disconnect(); Console.Error.WriteLine("Unexpected packet type, disconnecting: {0}", packet.PacketType); return; } } lock (unprocessedPackets) { // Store the other packets for retrieval later unprocessedPackets.AddRange(receivedPackets); } }
public bool ProcessIdPackets()// TODO: only process id packets { List <BasePacket> packets = RetrieveData(); if (packets.Count == 0) { // We're still waiting for their packet return(true); } else if (packets.Count == 1) { BasePacket packet = packets[0]; ServerIdPacket id = packet as ServerIdPacket; if (id != null) { gameId = id.Id; serverType = id.Type; int mapId = id.MapId; versionAndHandshakeComplete = true; IntrepidSerialize.ReturnToPool(packet); return(true); } /* if (packet is ServerPingHopperPacket) * { * HandleServerHopping(packet as ServerPingHopperPacket); * return true; * }*/ IntrepidSerialize.ReturnToPool(packet); } // If we're here, it means we either received more than one packet // or it wasn't a ServerIdPacket, which means the server isn't behaving // properly return(false); }
private void Sock_OnPacketsReceived(IPacketSend arg1, Queue <BasePacket> listOfPackets) { // all of these boolean checks should be replaced by a Strategy if (isBoundToGateway == true) { foreach (var packet in listOfPackets) { numPacketsReceived++; // normal processing KeepAlive ka = packet as KeepAlive; if (ka != null) { KeepAliveResponse kar = (KeepAliveResponse)IntrepidSerialize.TakeFromPool(PacketType.KeepAliveResponse); socket.Send(kar); continue; } WorldEntityPacket wep = packet as WorldEntityPacket; if (wep != null) { foreach (var playerId in playerIds) { if (playerId.entityId == wep.entityId) { playerId.position = wep.position.Get(); playerId.rotation = wep.rotation.Get(); SendAllEntityPositions(); } } continue; } ServerConnectionHeader sch = packet as ServerConnectionHeader; if (sch != null) { nextConnectionId = sch.connectionId; continue; } PlayerSaveStatePacket pss = packet as PlayerSaveStatePacket; if (pss != null) { HandlePlayerSaveState(pss); continue; } if (packet is ServerPingHopperPacket) { HandleServerHopping(packet as ServerPingHopperPacket); continue; } } } else { foreach (var packet in listOfPackets) { numPacketsReceived++; if (packet is ServerIdPacket) { ServerIdPacket id = packet as ServerIdPacket; if (id != null && id.Type == ServerIdPacket.ServerType.Gateway) { isBoundToGateway = true; break; } } } } }