public bool Send() { NetworkMessage msg = new NetworkMessage(Client); msg.Position = 2; msg.AddBytes(ToByteArray()); msg.InsertPacketHeader(); Client.Dll.Pipe.Send(msg); return(true); }
private void ParseFirstClientMsg() { try { clientRecvMsg.Position = clientRecvMsg.GetPacketHeaderSize(); OutgoingPacketType protocolId = (OutgoingPacketType)clientRecvMsg.GetByte(); int position; switch (protocolId) { case OutgoingPacketType.LoginServerRequest: protocol = Protocol.Login; clientRecvMsg.GetUInt16(); ushort clientVersion = clientRecvMsg.GetUInt16(); clientRecvMsg.GetUInt32(); clientRecvMsg.GetUInt32(); clientRecvMsg.GetUInt32(); position = clientRecvMsg.Position; clientRecvMsg.RsaOTDecrypt(); if (clientRecvMsg.GetByte() != 0) { Restart(); return; } xteaKey[0] = clientRecvMsg.GetUInt32(); xteaKey[1] = clientRecvMsg.GetUInt32(); xteaKey[2] = clientRecvMsg.GetUInt32(); xteaKey[3] = clientRecvMsg.GetUInt32(); clientRecvMsg.GetUInt32(); // account number clientRecvMsg.GetString(); // password clientRecvMsg.RsaOTEncrypt(position); clientRecvMsg.InsertPacketHeader(); serverTcp = new TcpClient(loginServers[selectedLoginServer].Server, loginServers[selectedLoginServer].Port); serverStream = serverTcp.GetStream(); serverStream.Write(clientRecvMsg.GetBuffer(), 0, clientRecvMsg.Length); serverStream.BeginRead(serverRecvMsg.GetBuffer(), 0, 2, new AsyncCallback(ServerReadCallBack), null); //clientStream.BeginRead(clientRecvMsg.GetBuffer(), 0, 2, new AsyncCallback(ClientReadCallBack), null); break; case OutgoingPacketType.GameServerRequest: protocol = Protocol.World; clientRecvMsg.GetUInt16(); clientRecvMsg.GetUInt16(); position = clientRecvMsg.Position; clientRecvMsg.RsaOTDecrypt(); if (clientRecvMsg.GetByte() != 0) { Restart(); return; } xteaKey[0] = clientRecvMsg.GetUInt32(); xteaKey[1] = clientRecvMsg.GetUInt32(); xteaKey[2] = clientRecvMsg.GetUInt32(); xteaKey[3] = clientRecvMsg.GetUInt32(); clientRecvMsg.GetByte(); // GM mode clientRecvMsg.GetUInt32(); // account number string characterName = clientRecvMsg.GetString(); clientRecvMsg.GetString(); // password clientRecvMsg.RsaOTEncrypt(position); clientRecvMsg.InsertPacketHeader(); int index = GetSelectedIndex(characterName); if (Version.CurrentVersion < 854) { serverTcp = new TcpClient(BitConverter.GetBytes(charList[index].WorldIP).ToIPString(), charList[index].WorldPort); serverStream = serverTcp.GetStream(); } serverStream.Write(clientRecvMsg.GetBuffer(), 0, clientRecvMsg.Length); serverStream.BeginRead(serverRecvMsg.GetBuffer(), 0, 2, new AsyncCallback(ServerReadCallBack), null); clientStream.BeginRead(clientRecvMsg.GetBuffer(), 0, 2, new AsyncCallback(ClientReadCallBack), null); break; default: break; } } catch (Exception ex) { WriteDebug(ex.ToString()); Restart(); } }