/// <summary> /// Attempts to create and initialize a connection to the DB server /// </summary> public bool connect(IPEndPoint dbPoint, bool bBlock) { //Assume the worst _syncStart.Reset(); _bLoginSuccess = false; using (LogAssume.Assume(_logger)) { Log.write("Connecting to database server ({0})..", dbPoint); //Start our connection _conn.begin(dbPoint); //Send our initial packet CS_Initial init = new CS_Initial(); _conn._client._connectionID = init.connectionID = new Random().Next(); init.CRCLength = Client.crcLength; init.udpMaxPacket = Client.udpMaxSize; _conn._client.send(init); _syncStart.WaitOne(10000); //Reset our event _syncStart.Reset(); _server._lastDBAttempt = Environment.TickCount; //Were we successful? return(_bLoginSuccess); } }
/// <summary> /// Called when making a connection to a zoneserver /// </summary> public void connect(IPEndPoint sPoint) { _syncStart.Set(); InfServer.Log.write("Connecting to {0}", sPoint); _wGame.updateChat(String.Format("Connecting to {0}", sPoint), "Client", InfServer.Protocol.Helpers.Chat_Type.System, ""); //Start our connection _conn.begin(sPoint); //Send our initial packet CS_Initial init = new CS_Initial(); int connectionID = new Random().Next(); init.connectionID = connectionID; _conn._client._connectionID = connectionID; _connectionID = connectionID; init.CRCLength = 0; init.udpMaxPacket = 496; //Send our init! _conn._client.send(init); }
/// <summary> /// Called when making a connection to a zoneserver /// </summary> public void connect(IPEndPoint sPoint) { Log.write("Connecting to {0}", sPoint); //Start our connection _conn.begin(sPoint); //Send our initial packet CS_Initial init = new CS_Initial(); //Generate a connection ID. _conn._client._connectionID = init.connectionID = new Random().Next(); init.CRCLength = 0; init.udpMaxPacket = 496; //Send our init! _conn._client.send(init); }
{ /// <summary> /// Handles the initial packet sent by the client /// </summary> static public void Handle_CS_Initial(CS_Initial pkt, Client client) { //Has he already been initialized? if (client._bInitialized) { //Make a note Log.write(TLog.Warning, "Client " + client + " attempted to initialize connection twice."); client.destroy(); return; } client._C2S_UDPSize = pkt.udpMaxPacket; client._connectionID = pkt.connectionID; //Set up our CRC keys int CRCKey = new Random().Next(); client._CRC_C2S.key = (uint)CRCKey; client._CRC_S2C.key = (uint)CRCKey; //Send our initial login packet SC_Initial sci = new SC_Initial(); sci.connectionID = pkt.connectionID; sci.CRCSeed = CRCKey; client._CRCLength = sci.CRCLen = (byte)Client.crcLength; sci.serverUDPMax = Client.udpMaxSize; sci.unk1 = 2; client.send(sci); //Enable CRC! client._CRC_C2S.bActive = true; client._CRC_S2C.bActive = true; //He's now initialized client._bInitialized = true; }
{ /// <summary> /// Creates a new system protocol packet. /// </summary> public PacketBase createSystemPacket(ushort typeID, byte[] buffer, int offset, int size) { //Ready our packet base PacketBase packet = null; offset++; size--; //What are we dealing with? switch (typeID) { case CS_Initial.TypeID: packet = new CS_Initial(typeID, buffer, offset, size); break; case BoxPacket.TypeID: packet = new BoxPacket(typeID, buffer, offset, size); break; case Disconnect.TypeID: packet = new Disconnect(typeID, buffer, offset, size); break; case PingPacket.TypeID: packet = new PingPacket(typeID, buffer, offset, size); break; case CS_State.TypeID: packet = new CS_State(typeID, buffer, offset, size); break; case Reliable.TypeID: packet = new Reliable(typeID, buffer, offset, size, 0); break; case Reliable.TypeID + 1: packet = new Reliable(typeID, buffer, offset, size, 1); break; case Reliable.TypeID + 2: packet = new Reliable(typeID, buffer, offset, size, 2); break; case Reliable.TypeID + 3: packet = new Reliable(typeID, buffer, offset, size, 3); break; case OutOfSync.TypeID: packet = new OutOfSync(typeID, buffer, offset, size, 0); break; case OutOfSync.TypeID + 1: packet = new OutOfSync(typeID, buffer, offset, size, 1); break; case OutOfSync.TypeID + 2: packet = new OutOfSync(typeID, buffer, offset, size, 2); break; case OutOfSync.TypeID + 3: packet = new OutOfSync(typeID, buffer, offset, size, 3); break; case ReliableEcho.TypeID: packet = new ReliableEcho(typeID, buffer, offset, size, 0); break; case ReliableEcho.TypeID + 1: packet = new ReliableEcho(typeID, buffer, offset, size, 1); break; case ReliableEcho.TypeID + 2: packet = new ReliableEcho(typeID, buffer, offset, size, 2); break; case ReliableEcho.TypeID + 3: packet = new ReliableEcho(typeID, buffer, offset, size, 3); break; case ReliableBox.TypeID: packet = new ReliableBox(typeID, buffer, offset, size, 0); break; case ReliableBox.TypeID + 1: packet = new ReliableBox(typeID, buffer, offset, size, 1); break; case ReliableBox.TypeID + 2: packet = new ReliableBox(typeID, buffer, offset, size, 2); break; case ReliableBox.TypeID + 3: packet = new ReliableBox(typeID, buffer, offset, size, 3); break; case DataPacketRcv.TypeID: packet = new DataPacketRcv(typeID, buffer, offset, size, 0); break; case DataPacketRcv.TypeID + 1: packet = new DataPacketRcv(typeID, buffer, offset, size, 1); break; case DataPacketRcv.TypeID + 2: packet = new DataPacketRcv(typeID, buffer, offset, size, 2); break; case DataPacketRcv.TypeID + 3: packet = new DataPacketRcv(typeID, buffer, offset, size, 3); break; default: //An undefined packet. packet = new PacketDummy(typeID, buffer, offset, size); break; } return(packet); }