Ejemplo n.º 1
0
 public static void AppendFileListToPacket(Client client, TcpPacket packet)
 {
     string[] files = System.IO.Directory.GetFiles(GetTempFolder(client));
     packet.AppendParameter(files.Length.ToString());
     for (int i = 0; i < files.Length; i++) {
         packet.AppendParameter(System.IO.Path.GetFileNameWithoutExtension(files[i]));
     }
 }
Ejemplo n.º 2
0
        public static IPv4Packet CreateIpV4Packet(IPAddress sourceIpAddress, IPAddress destinationIpAddress,
            TcpPacket payloadPacket)
        {
            var result = new IPv4Packet(sourceIpAddress, destinationIpAddress) { PayloadPacket = payloadPacket };

            payloadPacket.UpdateTCPChecksum();

            result.UpdateIPChecksum();
            result.UpdateCalculatedValues();

            return result;
        }
Ejemplo n.º 3
0
        internal bool BufferTCPPacket(TcpPacket pTCPPacket, bool pInbound)
        {
            if (pTCPPacket.Syn && pTCPPacket.Ack)
            {
                mInboundSequence = (uint)(pTCPPacket.SequenceNumber + 1); 
                return true;
            }
            if (pTCPPacket.PayloadData.Length == 0) return true;
            if (_mapleVersion == 0)
            {
                if (pTCPPacket.PayloadData.Length < 13) return false;
                byte[] tcpData = pTCPPacket.PayloadData;

                MaplePacket pr = new MaplePacket(tcpData);
                pr.ReadShort();
                _mapleVersion = pr.ReadUShort();
                var pos = pr.Position;
                {
                    var shrt = pr.ReadShort();
                    if (shrt < 0 || shrt > 0x0020)
                    {
                        return false;
                    }
                }
                pr.Reset(pos);
                _maplePatchLocation = pr.ReadString();
                byte[] localIV = pr.ReadBytes(4);
                byte[] remoteIV = pr.ReadBytes(4);
                _mapleLocale = pr.ReadByte();

                if (pr.Length > pr.Position || _mapleLocale > 0x12)
                {
                    return false;
                }

                pr.Dispose();
                pr = null;

                mOutboundStream = new PacketStream(localIV, _mapleLocale, _mapleVersion, !pInbound);
                mInboundStream = new PacketStream(remoteIV, _mapleLocale, (ushort)(0xFFFF - _mapleVersion), pInbound);
                mInboundSequence += (uint)tcpData.Length;

            }
            if (!pInbound) ProcessTCPPacket(pTCPPacket, ref mOutboundSequence, mOutboundBuffer, mOutboundStream, pInbound);
            else ProcessTCPPacket(pTCPPacket, ref mInboundSequence, mInboundBuffer, mInboundStream, pInbound);

            return true;
        }
Ejemplo n.º 4
0
 public static void AppendActiveTeam(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("activeteam");
     Player player = client.Player;
     for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
         if (client.Player.Team[i].Loaded == true) {
             packet.AppendParameters(player.Team[i].Name, player.Team[i].Species.ToString(), player.Team[i].Form.ToString(), ((int)player.Team[i].Shiny).ToString(), ((int)player.Team[i].Sex).ToString(),
                                     player.Team[i].HP.ToString(), player.Team[i].MaxHP.ToString(),
                                     Server.Math.CalculatePercent(player.Team[i].Exp, Exp.ExpManager.Exp[player.Team[i].Level - 1]).ToString(),
                                     player.Team[i].Level.ToString(), ((int)player.Team[i].StatusAilment).ToString(), player.Team[i].HeldItemSlot.ToString());
         } else {
             packet.AppendParameter("notloaded");
         }
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 5
0
 public static TcpPacket FromBytes(byte[] data)
 {
     TcpPacket packet = new TcpPacket();
     packet.PacketType = (TcpPacketType)Enum.ToObject(typeof(TcpPacketType), data[0]);
     if (data.Length > 1)
     {
         int position = 1;
         while (position < data.Length)
         {
             int length = BitConverter.ToInt32(data, position);
             position += 4;
             byte[] d = new byte[length];
             Array.Copy(data, position, d, 0, length);
             position += length;
             packet.Append(d);
         }
     }
     return packet;
 }
Ejemplo n.º 6
0
        public override object[] Attack(string[] DDoSWork)
        {
            object[] obj = new object[2];

            string sDestinationAddress = DDoSWork[0];

            ushort tcpSourcePort      = ushort.Parse(GetOpenPort());
            ushort tcpDestinationPort = 53;

            TcpPacket tcpPacket = new TcpPacket(tcpSourcePort, tcpDestinationPort);

            IPAddress ipSourceAddress      = System.Net.IPAddress.Parse(GetRandomIP());
            IPAddress ipDestinationAddress = System.Net.IPAddress.Parse(sDestinationAddress);

            IPv4Packet ipPacket = new IPv4Packet(ipSourceAddress, ipDestinationAddress);

            string sourceHwAddress         = "90-90-90-90-90-90";
            var    ethernetSourceHwAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(sourceHwAddress);

            string destionationHwAddress       = "80-80-80-80-80-80";
            var    ethernetDestinationHwAdress = System.Net.NetworkInformation.PhysicalAddress.Parse(destionationHwAddress);

            var ethernetPacket = new EthernetPacket(ethernetSourceHwAddress, ethernetDestinationHwAdress, EthernetPacketType.None);

            ipPacket.PayloadPacket       = tcpPacket;
            ethernetPacket.PayloadPacket = ipPacket;

            byte[] bPacket = new byte[75];



            var devices = CaptureDeviceList.Instance;

            int i = 0;

            var device = null;



            return(obj);
        }
Ejemplo n.º 7
0
    public void RESPONSE_LEAVE_ROOM_OTHER_PLAYER(TcpPacket packet)
    {
        SERVERtoCLIENT_LeaveRoomOtherPlayerPacketData recvData = new SERVERtoCLIENT_LeaveRoomOtherPlayerPacketData();

        recvData.Deserialize(packet);

        if (GameFramework.Instance.MyPlayer.State == PLAYER_STATE.LOBBY)
        {
            LobbyManager.Instance.CreateLobbyPlayer(recvData.playerID);

            RoomButton roomButton = RoomManager.Instance.GetRoomButton(recvData.roomKey);
            if (roomButton != null)
            {
                roomButton.DecreaseRoomJoinCount();
            }
        }
        else if (GameFramework.Instance.MyPlayer.State == PLAYER_STATE.IN_ROOM)
        {
            RoomManager.Instance.EnteredRoom.LeaveOtherPlayer(recvData.playerID);
        }
    }
Ejemplo n.º 8
0
        public Certificate(IpPacket ipPacket, TcpPacket tcpPacket)
        {
            TimeToLive = 0;

            ServerIP           = ipPacket.SourceAddress.ToString();
            UserIP             = ipPacket.DestinationAddress.ToString();
            ServerPort         = tcpPacket.SourcePort.ToString();
            UserPort           = tcpPacket.DestinationPort.ToString();
            Push_Flag          = tcpPacket.Psh;
            TotalPayLoadLength = tcpPacket.PayloadData.Length;
            TotalPayLoad       = null;

            Country         = new List <string>();
            StateOrProvince = new List <string>();
            Locality        = new List <string>();
            Organization    = new List <string>();
            CommonName      = new List <string>();

            PacketPayLoads = new List <byte[]>();
            PacketPayLoads.Add(tcpPacket.PayloadData);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Manages the DataReceived event of the output socket
        /// </summary>
        /// <param name="p">Received data</param>
        private void socketTCPOut_DataReceived(TcpPacket p)
        {
            if (!outputSocketReceptionEnabled)
            {
                return;
            }

            lastReceivedPacket = p;
            string stringReceived = p.DataString.Trim();

            //Console("Rcv: " + "[" + p.SenderIP.ToString() + "] " + stringReceived);
            try
            {
                OnDataReceived(p);
            }
            //catch (Exception ex)
            //{
            //	//Console("Exception wile managing ConnectionManager.DataReceived event: [" + ex.ToString() + "]");
            //}
            catch { }
        }
Ejemplo n.º 10
0
        public void BuildEthernetPacket()
        {
            var tcpPacket      = TcpPacket.RandomPacket();
            var ipPacket       = IPPacket.RandomPacket(IPVersion.IPv4);
            var ethernetPacket = EthernetPacket.RandomPacket();

            // put these all together into a single packet
            ipPacket.PayloadPacket       = tcpPacket;
            ethernetPacket.PayloadPacket = ipPacket;

            Console.WriteLine("random packet: {0}", ethernetPacket);

            // and get a byte array that represents the single packet
            var bytes = ethernetPacket.Bytes;

            // and re-parse that packet
            var newPacket = Packet.ParsePacket(LinkLayers.Ethernet,
                                               bytes);

            Console.WriteLine("re-parsed random packet: {0}", newPacket);
        }
        private NetworkEventArgs ExtractNetworkInformation(RawCapture packet)
        {
            EthernetPacket ethernetPacket = PacketDotNet.Packet.ParsePacket(LinkLayers.Ethernet, packet.Data) as EthernetPacket;
            IpPacket       ipPacket       = ethernetPacket.Extract(typeof(IpPacket)) as IpPacket;
            TcpPacket      tcpPacket      = ethernetPacket.Extract(typeof(TcpPacket)) as TcpPacket;

            int sourcePort = 0;
            int destPort   = 0;

            if (tcpPacket != null)
            {
                sourcePort = tcpPacket.SourcePort;
                destPort   = tcpPacket.DestinationPort;
            }

            string rawMessageText = System.Text.Encoding.UTF8.GetString(ethernetPacket.Bytes);

            string cleanMessageText = Regex.Replace(rawMessageText, @"[^a-zA-Z0-9`!@#$%^&*()_+|\-=\\{}\[\]:"";'<>?,./]", "");

            return(new NetworkEventArgs(ipPacket.DestinationAddress.ToString(), destPort, ipPacket.SourceAddress.ToString(), sourcePort, cleanMessageText, DateTime.Now, id));
        }
Ejemplo n.º 12
0
        public byte[] Generate(byte[] rawBytes)
        {
            int udpStreamId;

            if (!int.TryParse(streamIdTextBox.Text, out udpStreamId))
            {
                throw new Exception($"Failed to parse TCP stream ID. Must be an integer, was: '{streamIdTextBox.Text}'");
            }

            PhysicalAddress emptyAddress = PhysicalAddress.Parse("000000000000");

            PacketDotNet.EthernetPacket etherPacket = new EthernetPacket(emptyAddress, emptyAddress, EthernetType.IPv4);

            bool flip = udpStreamId < 0;

            udpStreamId = Math.Abs(udpStreamId);
            Random r = new Random(udpStreamId);

            IPAddress sourceIp = new IPAddress(r.Next());
            IPAddress destIp   = new IPAddress(r.Next());

            if (flip)
            {
                IPAddress tempAddress = sourceIp;
                sourceIp = destIp;
                destIp   = tempAddress;
            }
            IPv4Packet ipPacket = new IPv4Packet(sourceIp, destIp)
            {
                Protocol = ProtocolType.Udp
            };
            TcpPacket tcpPacket = new TcpPacket(1, 1)
            {
                PayloadData = rawBytes
            };

            ipPacket.PayloadPacket    = tcpPacket;
            etherPacket.PayloadPacket = ipPacket;
            return(etherPacket.Bytes);
        }
Ejemplo n.º 13
0
        public Packet GetNextPacket(RawCapture raw)
        {
            RawCapture rawCapture;
            Packet     result = null;

            rawCapture = raw;
            if (rawCapture != null)
            {
                Packet p = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
                result = p;
                try
                {
                    TcpPacket tcp = p.Extract <TcpPacket>();
                    if (tcp != null && tcp.PayloadData.Length > 0)
                    {
                        ExtractUpperPacket(tcp);
                    }
                    else
                    {
                        // UNDONE: For GOOSE and SV or null TCP
                        EthernetPacket ether = p.Extract <EthernetPacket>();
                        ExtractEthernetPacket(ether);
                    }
                }
                catch (Exception ex)
                {
#if DEBUG
                    Console.WriteLine("No. {0}: {1}\nTPKT buffer count: {2}.", currentPacketIndex, ex.Message, tpktBuff.Reassembled.Count);

                    Console.WriteLine(ex.StackTrace);
#endif
                }
            }
            if (packets.Count > 0)
            {
                result = packets.Pop();
            }

            return(result);
        }
Ejemplo n.º 14
0
        private static void device1_OnPacketArrival(object sender, CaptureEventArgs e)
        {
            try
            {
                Kavprot.Packets.Packet packet = Kavprot.Packets.Packet.ParsePacket(e.Packet);
                if (packet is Kavprot.Packets.EthernetPacket)
                {
                    var ip = Kavprot.Packets.IpPacket.GetEncapsulated(packet);

                    if (ip.Protocol == Kavprot.Packets.IPProtocolType.TCP)
                    {
                        TcpPacket tcp = TcpPacket.GetEncapsulated(packet);
                        if (tcp != null)
                        {
                            if (!tcp.IsValidChecksum(TransportPacket.TransportChecksumOption.None))
                            {
                                Alert.Attack("Intrusion Detected : Invalid TCP Checksum", "an intrusion was detected using TCP from " + ip.SourceAddress.ToString() + " @port " + tcp.SourcePort.ToString(), ToolTipIcon.Warning, true);
                            }
                        }
                    }
                    else if (ip.Protocol == Kavprot.Packets.IPProtocolType.UDP)
                    {
                        UdpPacket udp = UdpPacket.GetEncapsulated(packet);
                        if (udp != null)
                        {
                            if (!udp.IsValidChecksum(TransportPacket.TransportChecksumOption.None))
                            {
                                Alert.Attack("Intrusion Detected : Invalid UDP Checksum", "an intrusion was detected using UDP from " + ip.SourceAddress.ToString() + " @port " + udp.SourcePort.ToString(), ToolTipIcon.Warning, true);
                            }
                        }
                    }
                }
            }
            catch
            {
            }
            finally
            {
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        ///     尝试发送FIN+ACK标志结束某一组互联网上的连接。
        /// </summary>
        /// <param name="srcAddress">连接的起点,应为小端地址。</param>
        /// <param name="srcPort">连接起点的端口。</param>
        /// <param name="dstAddress">连接的终点,应为大端地址。</param>
        /// <param name="dstPort">连接终点的端口。</param>
        /// <returns>成功发送包返回true,失败返回false。</returns>
        public bool KillConnection(IPAddress srcAddress, ushort srcPort, IPAddress dstAddress, ushort dstPort)
        {
            EthernetPacket ether;

            // 寻找指定目标
            lock (_tcpLinks) {
                if (_tcpLinks.All(item => !(item.SrcAddress.Equals(srcAddress) && item.SrcPort == srcPort) ||
                                  !(item.DstAddress.Equals(dstAddress) && item.DstPort == dstPort)))
                {
                    return(false);
                }
                ether = new EthernetPacket(_tcpLinks.Find(item => item.SrcAddress.Equals(srcAddress) && item.SrcPort == srcPort &&
                                                          item.DstAddress.Equals(dstAddress) && item.DstPort == dstPort)
                                           .LastPacket.BytesHighPerformance);
            }

            // 解析包数据
            var ipv4 = (IPv4Packet)ether.PayloadPacket;
            var tcp  = (TcpPacket)ipv4.PayloadPacket;

            // 设置数据包内容
            var payload = new TcpPacket(tcp.SourcePort, tcp.DestinationPort)
            {
                Fin                  = true,
                Ack                  = true,
                SequenceNumber       = (uint)(tcp.SequenceNumber + (tcp.PayloadPacket?.TotalPacketLength ?? 0)),
                AcknowledgmentNumber = tcp.AcknowledgmentNumber,
                WindowSize           = tcp.WindowSize
            };

            payload.UpdateCalculatedValues();

            ipv4.PayloadPacket   = payload;
            payload.ParentPacket = ipv4;
            payload.UpdateTCPChecksum();

            _device.SendPacket(ether);
            return(true);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Create a tcp
        /// </summary>
        /// <param name="tcp">
        /// A <see cref="TcpPacket"/>
        /// </param>
        public TcpConnection(TcpPacket tcp)
        {
            ConnectionState = ConnectionStates.Open;

            closeTimer          = new System.Timers.Timer();
            closeTimer.Interval = Timeout.TotalMilliseconds;
            closeTimer.Elapsed += HandleCloseTimerElapsed;

            Flows = new List <TcpFlow>();
            var ip = tcp.ParentPacket as IPPacket;

            var flowA = new TcpFlow(ip.SourceAddress, tcp.SourcePort);

            Flows.Add(flowA);

            var flowB = new TcpFlow(ip.DestinationAddress, tcp.DestinationPort);

            Flows.Add(flowB);

            // start the close timer
            closeTimer.Enabled = true;
        }
        private void handleServerInfo(TcpPacket packet)
        {
            int infoSetsNumber = 0,
                infoOffset     = 32;

            // Calculating how many server information sets do we received from server.
            infoSetsNumber = ragnarokPacket.getServerInfoSetsNumber(packet.PayloadData.Length);

            byte[] payloadData = packet.PayloadData;

            try
            {
                for (int i = 0, dataOffset = 0; i < infoSetsNumber; i++)
                {
                    int    port, playerCount;
                    byte[] byteServerName = new byte[20];
                    string IP, strServerName;
                    IP = payloadData[0 + i * infoOffset + dataOffset].ToString() + "." + payloadData[1 + i * infoOffset + dataOffset].ToString() + "." +
                         payloadData[2 + i * infoOffset + dataOffset].ToString() + "." + payloadData[3 + i * infoOffset + dataOffset].ToString();
                    port        = (payloadData[5 + i * infoOffset + dataOffset] << 8) + payloadData[4 + i * infoOffset + dataOffset];
                    playerCount = (payloadData[27 + i * infoOffset + dataOffset] << 8) + payloadData[26 + i * infoOffset + dataOffset];

                    Array.Copy(payloadData, 6 + i * infoOffset + dataOffset, byteServerName, 0, 20);
                    strServerName = System.Text.Encoding.GetEncoding("big5").GetString(byteServerName, 0, 20).Replace("\0", string.Empty);

                    mainform.Invoke(mainform.updateDataGridView_Var, strServerName, IP, port.ToString(), playerCount.ToString());

                    dataOffset += 4;
                    /* free byteServerName.*/
                    byteServerName = null;
                }

                onListen = false;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error in handle server info:" + e);
            }
        }
Ejemplo n.º 18
0
        void send_packet()
        {
            var tcpPacket = new TcpPacket(UInt16.Parse(SRC_port_textBox.Text), UInt16.Parse(DST_port_textBox.Text));

            var ipSourceAddress      = IPAddress.Parse(SRC_IP_textBox.Text); // "127.0.0.1"
            var ipDestinationAddress = IPAddress.Parse(DST_IP_textBox.Text); //"127.0.0.1"
            var ipPacket             = new IPv4Packet(ipSourceAddress, ipDestinationAddress);

            tcpPacket.PayloadData = Encoding.Default.GetBytes(Data_textBox.Text); // "I like dogs"

            var            sourceHwAddress              = "90-90-90-90-90-90";
            var            ethernetSourceHwAddress      = System.Net.NetworkInformation.PhysicalAddress.Parse(sourceHwAddress);
            var            destinationHwAddress         = "80-80-80-80-80-80";
            var            ethernetDestinationHwAddress = System.Net.NetworkInformation.PhysicalAddress.Parse(destinationHwAddress);
            EthernetPacket ethernetPacket = new EthernetPacket(ethernetSourceHwAddress,
                                                               ethernetDestinationHwAddress,
                                                               EthernetType.None);

            ipPacket.PayloadPacket       = tcpPacket;
            ethernetPacket.PayloadPacket = ipPacket;
            captureDevice.SendPacket(ethernetPacket);
        }
Ejemplo n.º 19
0
        public void TestGetEncapsulated()
        {
            var ethernetPacket = BuildTCPPacket();

            // store the logging value
            var oldThreshold = LoggingConfiguration.GlobalLoggingLevel;

            // disable logging to improve performance
            LoggingConfiguration.GlobalLoggingLevel = log4net.Core.Level.Off;

            var startTime = DateTime.Now;
            var endTime   = startTime.Add(new TimeSpan(0, 0, 15));
            int testRuns  = 0;

            while (DateTime.Now < endTime)
            {
                // Disable CS0618 (use of obsolete method), because we are testing the now obsolete
                // methods for performance
#pragma warning disable 0618
                var tcpPacket = TcpPacket.GetEncapsulated(ethernetPacket);
#pragma warning restore 0618

                Assert.IsNotNull(tcpPacket);
                Assert.AreEqual(tcpPacket.SourcePort, tcpSourcePort);
                Assert.AreEqual(tcpPacket.DestinationPort, tcpDestinationPort);

                testRuns++;
            }

            // update the actual end of the loop
            endTime = DateTime.Now;

            // restore logging
            LoggingConfiguration.GlobalLoggingLevel = oldThreshold;

            var rate = new Rate(startTime, endTime, testRuns, "Test runs");

            Console.WriteLine(rate.ToString());
        }
Ejemplo n.º 20
0
    public void RESPONSE_GAME_PLAYER_MOVE(TcpPacket packet)
    {
        if (packet.header.extra == (int)EXTRA.SUCCESS)
        {
            SERVERtoHOST_GamePlayerMovePacketData recvData = new SERVERtoHOST_GamePlayerMovePacketData();
            recvData.Deserialize(packet);

            CLIENTtoSERVER_GamePlayerMovePacketData sendData = new CLIENTtoSERVER_GamePlayerMovePacketData();
            sendData.playerKey = recvData.playerKey;
            sendData.gameKey   = GameManager.Instance.GameKey;

            sendData.posX = recvData.posX;
            sendData.posY = recvData.posY;
            sendData.posZ = recvData.posZ;

            sendData.angularX = recvData.angularX;
            sendData.angularY = recvData.angularY;
            sendData.angularZ = recvData.angularZ;

            NetworkManager.Instance.SendCommand((int)PROTOCOL.GAME_PLAYER_MOVE, (int)EXTRA.HOST_TO_SERVER, sendData);
        }
    }
Ejemplo n.º 21
0
        void ParsePacket(IPv4Packet ipPacket)
        {
            TcpPacket tcpPacket = (TcpPacket)ipPacket.PayloadPacket;

            System.Text.StringBuilder sb = new System.Text.StringBuilder();

            sb.Append(String.Format("{0}:{1}", ipPacket.SourceAddress, tcpPacket.SourcePort));
            sb.Append(" --> ");
            sb.Append(String.Format("{0}:{1}", ipPacket.DestinationAddress, tcpPacket.DestinationPort));
            sb.AppendLine(String.Format(" Len = {0}", tcpPacket.PayloadData.Length));
            //sb.Append(" Data = ");

            //foreach (byte b in tcpPacket.PayloadData)
            //{
            //    sb.Append(String.Format("{0} ", b.ToString()));
            //}

            //sb.AppendLine(ByteArrayToHex(tcpPacket.PayloadData));
            sb.Append(FormatPacketData(tcpPacket.PayloadData));

            Log(sb.ToString());
        }
Ejemplo n.º 22
0
        /// <summary>
        /// 获取Flag标志位
        /// </summary>
        /// <param name="tcp"></param>
        /// <returns></returns>
        public static string TcpFlagType(TcpPacket tcp)
        {
            StringBuilder sbr = new StringBuilder();

            if (tcp.Ack)
            {
                sbr.Append("ACK ");
            }
            if (tcp.Urg)
            {
                sbr.Append("URG ");
            }
            if (tcp.Psh)
            {
                sbr.Append("PSH ");
            }
            if (tcp.Rst)
            {
                sbr.Append("RST ");
            }
            if (tcp.Syn)
            {
                sbr.Append("SYN ");
            }
            if (tcp.Fin)
            {
                sbr.Append("FIN ");
            }
            if (tcp.ECN)
            {
                sbr.Append("ECN ");
            }
            if (tcp.CWR)
            {
                sbr.Append("CWR ");
            }
            return(sbr.ToString());
        }
Ejemplo n.º 23
0
        private void ProcessTCPPacket(TcpPacket pTCPPacket, ref uint pSequence, Dictionary <uint, byte[]> pBuffer, PacketStream pStream, bool pInbound)
        {
            if (pTCPPacket.SequenceNumber > pSequence)
            {
                byte[] data;
                while ((data = pBuffer.GetOrDefault(pSequence, null)) != null)
                {
                    pBuffer.Remove(pSequence);
                    pStream.Append(data);
                    pSequence += (uint)data.Length;
                }
                if (pTCPPacket.SequenceNumber > pSequence)
                {
                    pBuffer[(uint)pTCPPacket.SequenceNumber] = pTCPPacket.PayloadData;
                }
            }
            if (pTCPPacket.SequenceNumber < pSequence)
            {
                int difference = (int)(pSequence - pTCPPacket.SequenceNumber);
                if (difference > 0)
                {
                    byte[] data = pTCPPacket.PayloadData;
                    if (data.Length > difference)
                    {
                        pStream.Append(data, difference, data.Length - difference);
                        pSequence += (uint)(data.Length - difference);
                    }
                }
            }
            else if (pTCPPacket.SequenceNumber == pSequence)
            {
                byte[] data = pTCPPacket.PayloadData;
                pStream.Append(data);
                pSequence += (uint)data.Length;
            }

            CheckForPackets(pStream, pInbound);
        }
Ejemplo n.º 24
0
    public void RESPONSE_JOIN_ROOM_OTHER_PLAYER(TcpPacket packet)
    {
        if (packet.header.extra == (int)EXTRA.SUCCESS)
        {
            SERVERtoCLIENT_JoinRoomOtherPlayerPacketData recvData = new SERVERtoCLIENT_JoinRoomOtherPlayerPacketData();
            recvData.Deserialize(packet);

            if (GameFramework.Instance.MyPlayer.State == PLAYER_STATE.LOBBY)
            {
                //내가 Lobby에 있을때 다른사람이 Room으로 들어갔으므로 오른쪽 유저 리스트에 해당 유저를 지워야 함
                LobbyManager.Instance.RemoveLobbyPlayer(recvData.playerID);
                //해당 방에 사람이 들어갔으므로 방 참여자수 1 증가
                RoomButton roomButton = RoomManager.Instance.GetRoomButton(recvData.roomKey);
                if (roomButton != null)
                {
                    roomButton.IncreaseRoomJoinCount();
                }
            }
            else if (GameFramework.Instance.MyPlayer.State == PLAYER_STATE.IN_ROOM)
            {
                //내가 Room에 있을때 다른사람이 Room에서 들어왔으므로 방에 해당 유저를 추가해야 함

                string chatMessage = "[Server] : " + recvData.playerID + "님이 방에 입장하였습니다.";
                RoomGUI.Instance.ShowChatMessage(chatMessage, Color.red);

                Player player = new OtherPlayer();
                player.Initialize();
                player.PlayerID = recvData.playerID;

                RoomPlayer roomPlayer = RoomManager.Instance.CreateRoomPlayer(player);
                roomPlayer.readyState = false;
                roomPlayer.isLeader   = false;

                RoomManager.Instance.EnteredRoom.PushRoomPlayer(roomPlayer);
                RoomGUI.Instance.UpdateRoomPlayerUIElement(RoomManager.Instance.EnteredRoom);
            }
        }
    }
Ejemplo n.º 25
0
    public void RESPONSE_JOIN_ROOM(TcpPacket packet)
    {
        if (packet.header.extra == (int)EXTRA.SUCCESS)
        {
            SERVERtoCLIENT_JoinRoomPacketData recvData = new SERVERtoCLIENT_JoinRoomPacketData();
            recvData.Deserialize(packet);

            LobbySceneGUI.Instance.ChangeLobbyToRoom();
            RoomPlayer[] roomPlayers = new RoomPlayer[recvData.joinedPlayerCount];

            for (int i = 0; i < recvData.joinedPlayerCount; i++)
            {
                Player player;

                if (recvData.joinedPlayers[i] != GameFramework.Instance.MyPlayer.PlayerID)
                {
                    player = new OtherPlayer();
                    player.Initialize();
                    player.PlayerID = recvData.joinedPlayers[i];
                }
                else
                {
                    player = GameFramework.Instance.MyPlayer;
                }

                RoomPlayer roomPlayer = RoomManager.Instance.CreateRoomPlayer(player);
                roomPlayer.readyState = recvData.joinedPlayerReadyState[i];
                roomPlayer.isLeader   = recvData.isLeaders[i];
                roomPlayers[i]        = roomPlayer;
            }

            Room room = RoomManager.Instance.CreateRoom(recvData.roomName, recvData.roomKey, recvData.joinedPlayerCount);
            room.PushRoomPlayer(roomPlayers);
            room.Enter();

            RoomGUI.Instance.Initialize(room);
        }
    }
Ejemplo n.º 26
0
    public void DataHandle()
    {
        while (true)
        {
            if (receiveMsgs.Count != 0)
            {
                //패킷을 Dequeue 한다 패킷 : 메시지 타입 + 메시지 내용
                lock (receiveLock)
                {
                    tcpPacket = receiveMsgs.Dequeue();
                }

                //타입과 내용을 분리한다
                byte Id = tcpPacket.msg[0];
                msg = new byte[tcpPacket.msg.Length - 1];
                Array.Copy(tcpPacket.msg, 1, msg, 0, msg.Length);

                HeaderData headerData = new HeaderData();

                //Dictionary에 등록된 델리게이트형 메소드에서 msg를 반환받는다.
                if (m_notifier.TryGetValue(Id, out recvNotifier))
                {
                    ServerPacketId packetId = recvNotifier(msg);
                    //send 할 id를 반환받음
                    if (packetId != ServerPacketId.None)
                    {
                        tcpPacket = new TcpPacket(msg, tcpPacket.client);
                        sendMsgs.Enqueue(tcpPacket);
                    }
                }
                else
                {
                    Console.WriteLine("DataHandler::TryGetValue 에러 " + Id);
                    headerData.Id = (byte)ServerPacketId.None;
                }
            }
        }
    }
Ejemplo n.º 27
0
        // check if packet might contain traces of POST data (packet to process)
        public static bool HasPOST(TcpPacket packet)
        {
            if (packet.PayloadData != null)
            {
                var data = encoding.GetString(packet.PayloadData);

                // check for possible full GET/POST requests
                if (data.Length > 3 && (data.Substring(0, 4) == "POST" || data.Substring(0, 3) == "GET"))
                {
                    return(false);
                }

                // get rid of possible left-over headers
                if (data.Contains("\r\n\r\n"))
                {
                    var parts = Regex.Split(data, "\r\n\r\n");
                    if (parts.Length > 1)
                    {
                        data = parts[1];
                    }
                }

                // check for "key=value" pairs
                var split = data.Split('&');

                if (split.Length > 0)
                {
                    var keys = split[0].Split('=');

                    if (keys.Length > 0)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
    public void HandleAsyncReceiveData(IAsyncResult asyncResult)
    {
        AsyncData asyncData  = (AsyncData)asyncResult.AsyncState;
        Socket    clientSock = asyncData.clientSock;

        try
        {
            asyncData.msgSize = (short)clientSock.EndReceive(asyncResult);
        }
        catch
        {
            Console.WriteLine("클라이언트가 접속을 종료했습니다.");
            LoginUser.Remove(clientSock);
            clientSock.Close();
            return;
        }

        if (asyncData.msgSize > 0)
        {
            Array.Resize(ref asyncData.msg, asyncData.msgSize);
            TcpPacket paket = new TcpPacket(asyncData.msg, clientSock);

            lock (receiveLock)
            {
                try
                {
                    msgs.Enqueue(paket);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }

        asyncData = new AsyncData(clientSock);
        clientSock.BeginReceive(asyncData.msg, 0, UnityServer.packetLength, SocketFlags.None, asyncReceiveLengthCallBack, (Object)asyncData);
    }
Ejemplo n.º 29
0
    public void RESPONSE_ENTER_LOBBY(TcpPacket packet)
    {
        if (packet.header.extra == (int)EXTRA.SUCCESS)
        {
            SERVERtoCLIENT_EnterLobbyPacketData recvData = new SERVERtoCLIENT_EnterLobbyPacketData();
            recvData.Deserialize(packet);

            for (int i = 0; i < recvData.roomCount; i++)
            {
                RoomButton roomButton = RoomManager.Instance.CreateRoomButton(recvData.roomKeys[i], recvData.roomNames[i], recvData.isStart[i], recvData.joinedRoomPlayerCount[i]);
                LobbyManager.Instance.AttachRoomButton(roomButton);
            }

            for (int i = 0; i < recvData.playerCount; i++)
            {
                LobbyManager.Instance.CreateLobbyPlayer(recvData.playerIds[i]);
            }
        }
        else if (packet.header.extra == (int)EXTRA.FAIL)
        {
            Debug.Log("FAIL RESPONSE_LOBBY_INFO");
        }
    }
Ejemplo n.º 30
0
        public void SendMenuTo(Client client)
        {
            TcpPacket packet = new TcpPacket("custommenu");

            packet.AppendParameters(MenuName, Closeable.ToString());
            packet.AppendParameters(Width.ToString(), Height.ToString());
            packet.AppendParameters(mPictures.Count.ToString(), mLabels.Count.ToString(), mTextBoxs.Count.ToString());
            for (int i = 0; i < mPictures.Count; i++)
            {
                packet.AppendParameters(mPictures[i].ImagePath, mPictures[i].X.ToString(), mPictures[i].Y.ToString());
            }
            for (int i = 0; i < mLabels.Count; i++)
            {
                packet.AppendParameters(mLabels[i].X.ToString(), mLabels[i].Y.ToString(), mLabels[i].Width.ToString(), mLabels[i].Height.ToString(),
                                        mLabels[i].Text, mLabels[i].Font, mLabels[i].FontSize.ToString(), mLabels[i].Color.ToArgb().ToString());
            }
            for (int i = 0; i < mTextBoxs.Count; i++)
            {
                packet.AppendParameters(mTextBoxs[i].X.ToString(), mTextBoxs[i].Y.ToString(), mTextBoxs[i].Width.ToString(), mTextBoxs[i].Text);
            }
            packet.FinalizePacket();
            Messenger.SendDataTo(client, packet);
        }
        public Packet Resolve()
        {
            using (MemoryStream ms = new MemoryStream(this._datagram))
            {
                BinaryReader rdr = new BinaryReader(ms, Packet.ENCODING);

                TcpPacket packet = new TcpPacket();
                packet.Version = rdr.ReadInt16();
                /*packet.Type = */ rdr.ReadByte();//skip packet.Type
                packet.Command = rdr.ReadUInt64();

                switch (packet.CMD)
                {
                case TcpPacket.CMD_REQUEST_FILE_TRANSPORT:
                    packet.Extend = ResolveRequestFileTransportExtend(rdr, _securityKey);
                    break;

                default:
                    break;
                }
                return(packet);
            }
        }
Ejemplo n.º 32
0
 private void TCP(TcpPacket tcp)
 {
     if (TCPNode == null)
     {
         TCPNode = new TreeNode();
     }
     TCPNode.Nodes.Clear();
     TCPNode.Text = string.Format("Transmission Control Protocol, Src Port: {0}, Dst Port: {1}, Seq: {2}, Ack: {3}",
                                  tcp.SourcePort, tcp.DestinationPort, tcp.SequenceNumber, tcp.Ack);
     TCPNode.Nodes.Add(string.Format("Source Port: {0}", tcp.SourcePort));
     TCPNode.Nodes.Add(string.Format("Destination Port: {0}", tcp.DestinationPort));
     TCPNode.Nodes.Add(string.Format("Sequence number: {0}", tcp.SequenceNumber));
     TCPNode.Nodes.Add(string.Format("Acknowledgement number: {0}", tcp.SequenceNumber));
     TCPNode.Nodes.Add(string.Format("Header Length: {0} bytes", tcp.Header.Length));
     TCPNode.Nodes.Add(string.Format("Flags: {0}", tcp.AllFlags.ToString("X")));
     TCPNode.Nodes.Add(string.Format("Window size value: {0}", tcp.WindowSize));
     TCPNode.Nodes.Add(string.Format("Checksum: {0}", tcp.Checksum));
     TCPNode.Nodes.Add(string.Format("Urgent pointer: {0}", tcp.UrgentPointer));
     //TCPNode.Nodes.Add(string.Format(""));
     //TCPNode.Nodes.Add(string.Format(""));
     tree.Nodes.Add(TCPNode);
     appNext(tcp.PayloadData, tcp.SourcePort, tcp.DestinationPort);
 }
Ejemplo n.º 33
0
 public void AddPacketToMapBut(Client client, IMap map, TcpPacket packet, int sourceX, int sourceY, int range)
 {
     if (map != null)
     {
         if (!cachingEnabled)
         {
             foreach (Client i in map.GetClients())
             {
                 if (client == null || i.TcpID != client.TcpID)
                 {
                     if (range == -1 || IsInRange(range, sourceX, sourceY, i.Player.X, i.Player.Y))
                     {
                         AddPacket(i, packet);
                     }
                 }
             }
         }
         else
         {
             hitListCache.AddCacheItem(new object[] { PacketHitListTargets.RangedMapBut, client, map, packet, sourceX, sourceY, range });
         }
     }
 }
Ejemplo n.º 34
0
        public void HandleTcpPacket(IPv4Datagram datagram)
        {
            TcpPacket packet = datagram.HandleTcpPacket();


            ListViewItem item = new ListViewItem(count.ToString());

            item.SubItems.Add(datagram.SourceName);
            item.SubItems.Add(packet.SourcePort.ToString() + "  " + consts.GetTcpPorts(packet.SourcePort));
            item.SubItems.Add(datagram.DestinationName);
            item.SubItems.Add(packet.DestinationPort.ToString() + "  " + consts.GetTcpPorts(packet.DestinationPort));
            item.SubItems.Add(datagram.Identification.ToString());
            item.SubItems.Add(packet.Sequence.ToString());
            lstwTcp.Items.Add(item);


            packets.Add(GetHashString(), datagram);           //Bu iki IP cifti ile ilgili tum Datagramlar


            count++;
            lblCount.Text = count.ToString();
            this.Update();
        }
Ejemplo n.º 35
0
    public override void Deserialize(TcpPacket packet)
    {
        this.roomCount = packet.stream.ReadInt();

        this.roomKeys              = new string[this.roomCount];
        this.roomNames             = new string[this.roomCount];
        this.isStart               = new bool[this.roomCount];
        this.joinedRoomPlayerCount = new int[this.roomCount];

        for (int i = 0; i < this.roomCount; i++)
        {
            this.roomKeys[i] = packet.stream.ReadString();
        }

        for (int i = 0; i < this.roomCount; i++)
        {
            this.roomNames[i] = packet.stream.ReadString();
        }

        for (int i = 0; i < this.roomCount; i++)
        {
            this.joinedRoomPlayerCount[i] = packet.stream.ReadInt();
        }

        for (int i = 0; i < this.roomCount; i++)
        {
            this.isStart[i] = packet.stream.ReadBool();
        }

        this.playerCount = packet.stream.ReadInt();
        this.playerIds   = new string[this.playerCount];

        for (int i = 0; i < this.playerCount; i++)
        {
            this.playerIds[i] = packet.stream.ReadString();
        }
    }
Ejemplo n.º 36
0
        public static void AppendMapNpcs(Client client, PacketHitList hitlist, IMap map, bool temp)
        {
            TcpPacket packet = new TcpPacket("mapnpcdata");
            packet.AppendParameter(map.MapID);
            packet.AppendParameter(temp.ToIntString());
            for (int i = 0; i < Constants.MAX_MAP_NPCS; i++) {
                if ((int)map.ActiveNpc[i].Direction > 3) map.ActiveNpc[i].Direction = Enums.Direction.Right;
                packet.AppendParameters(map.ActiveNpc[i].Num.ToString(), map.ActiveNpc[i].Sprite.ToString(), map.ActiveNpc[i].Form.ToString(), ((int)map.ActiveNpc[i].Shiny).ToString(), ((int)map.ActiveNpc[i].Sex).ToString(),
                    map.ActiveNpc[i].X.ToString(), map.ActiveNpc[i].Y.ToString(), ((int)map.ActiveNpc[i].Direction).ToString(), ((int)map.ActiveNpc[i].StatusAilment).ToString());
                if (map.ActiveNpc[i].Num > 0 && NpcManager.Npcs[map.ActiveNpc[i].Num].Behavior != Enums.NpcBehavior.Friendly && NpcManager.Npcs[map.ActiveNpc[i].Num].Behavior != Enums.NpcBehavior.Shopkeeper && NpcManager.Npcs[map.ActiveNpc[i].Num].Behavior != Enums.NpcBehavior.Scripted) {
                    packet.AppendParameters("1");
                } else {
                    packet.AppendParameters("0");
                }
            }
            packet.FinalizePacket();

            hitlist.AddPacket(client, packet);
        }
Ejemplo n.º 37
0
        public static TcpPacket CreateTournamentRulesPacket(Tournament tournament)
        {
            TcpPacket packet = new TcpPacket("tournamentrules");

            packet.AppendParameters(
                tournament.Rules.SleepClause.ToIntString(),
                 tournament.Rules.AccuracyClause.ToIntString(),
                 tournament.Rules.SpeciesClause.ToIntString(),
                 tournament.Rules.FreezeClause.ToIntString(),
                 tournament.Rules.OHKOClause.ToIntString(),
                 tournament.Rules.SelfKOClause.ToIntString());

            return packet;
        }
Ejemplo n.º 38
0
        public static void AppendMapItems(Client client, PacketHitList hitlist, IMap map, bool temp)
        {
            TcpPacket packet = new TcpPacket("mapitemdata");
            packet.AppendParameter(map.MapID);
            packet.AppendParameter(temp.ToIntString());
            for (int i = 0; i < Constants.MAX_MAP_ITEMS; i++) {//server will lie to the client and send all hidden items as blank
                if (!map.ActiveItem[i].Hidden) {
                    packet.AppendParameters(map.ActiveItem[i].Num.ToString(), map.ActiveItem[i].Value.ToString(), map.ActiveItem[i].Sticky.ToIntString(), map.ActiveItem[i].X.ToString(), map.ActiveItem[i].Y.ToString());
                } else {
                    packet.AppendParameters("0", "0", "0", "0", "0");
                }
            }
            packet.FinalizePacket();

            hitlist.AddPacket(client, packet);
        }
Ejemplo n.º 39
0
 public static void AppendAllNpcs(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("allnpcsdata");
     for (int i = 1; i <= Npcs.NpcManager.Npcs.MaxNpcs; i++) {
         packet.AppendParameters(i.ToString(),
                                 Npcs.NpcManager.Npcs[i].Name.Trim());
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 40
0
 public void SendMenuTo(Client client)
 {
     TcpPacket packet = new TcpPacket("custommenu");
     packet.AppendParameters(MenuName, Closeable.ToString());
     packet.AppendParameters(Width.ToString(), Height.ToString());
     packet.AppendParameters(mPictures.Count.ToString(), mLabels.Count.ToString(), mTextBoxs.Count.ToString());
     for (int i = 0; i < mPictures.Count; i++) {
         packet.AppendParameters(mPictures[i].ImagePath, mPictures[i].X.ToString(), mPictures[i].Y.ToString());
     }
     for (int i = 0; i < mLabels.Count; i++) {
         packet.AppendParameters(mLabels[i].X.ToString(), mLabels[i].Y.ToString(), mLabels[i].Width.ToString(), mLabels[i].Height.ToString(),
             mLabels[i].Text, mLabels[i].Font, mLabels[i].FontSize.ToString(), mLabels[i].Color.ToArgb().ToString());
     }
     for (int i = 0; i < mTextBoxs.Count; i++) {
         packet.AppendParameters(mTextBoxs[i].X.ToString(), mTextBoxs[i].Y.ToString(), mTextBoxs[i].Width.ToString(), mTextBoxs[i].Text);
     }
     packet.FinalizePacket();
     Messenger.SendDataTo(client, packet);
 }
Ejemplo n.º 41
0
 public static void AppendAllItems(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("allitemsdata");
     for (int i = 0; i < Items.ItemManager.Items.MaxItems; i++) {
         if (Items.ItemManager.Items[i].Name.Trim() != "") {
             packet.AppendParameters(i.ToString(),
                                     Items.ItemManager.Items[i].Name.Trim(),
                                     Items.ItemManager.Items[i].Desc.Trim(),
                                     Items.ItemManager.Items[i].Pic.ToString(),
                                     ((int)Items.ItemManager.Items[i].Type).ToString(),
                                     Items.ItemManager.Items[i].Data1.ToString(),
                                     Items.ItemManager.Items[i].Data2.ToString(),
                                     Items.ItemManager.Items[i].Data3.ToString(),
                                     Items.ItemManager.Items[i].Price.ToString(),
                                     Items.ItemManager.Items[i].StackCap.ToString(),
                                     Items.ItemManager.Items[i].Bound.ToIntString(),
                                     Items.ItemManager.Items[i].Loseable.ToIntString(),
                                     Items.ItemManager.Items[i].Rarity.ToString(),
                                     Items.ItemManager.Items[i].ReqData1.ToString(),
                                     Items.ItemManager.Items[i].ReqData2.ToString(),
                                     Items.ItemManager.Items[i].ReqData3.ToString(),
                                     Items.ItemManager.Items[i].ReqData4.ToString(),
                                     Items.ItemManager.Items[i].ReqData5.ToString(),
                                     Items.ItemManager.Items[i].ScriptedReq.ToString(),
                                     Items.ItemManager.Items[i].AddHP.ToString(),
                                     Items.ItemManager.Items[i].AddPP.ToString(),
                                     Items.ItemManager.Items[i].AddAttack.ToString(),
                                     Items.ItemManager.Items[i].AddDefense.ToString(),
                                     Items.ItemManager.Items[i].AddSpAtk.ToString(),
                                     Items.ItemManager.Items[i].AddSpDef.ToString(),
                                     Items.ItemManager.Items[i].AddSpeed.ToString(),
                                     Items.ItemManager.Items[i].AddEXP.ToString(),
                                     Items.ItemManager.Items[i].AttackSpeed.ToString(),
                                     Items.ItemManager.Items[i].RecruitBonus.ToString());
         } else {
             packet.AppendParameters(i.ToString(), 0.ToString());
         }
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 42
0
 public static void AppendAvailableExpKitModules(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("kitmodules");
     packet.AppendParameter(client.Player.AvailableExpKitModules.Count);
     for (int i = 0; i < client.Player.AvailableExpKitModules.Count; i++) {
         packet.AppendParameter((int)client.Player.AvailableExpKitModules[i].Type);
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 43
0
 public static void AppendAllStoryNames(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("allstoriesdata");
     for (int i = 0; i <= Stories.StoryManager.Stories.MaxStories; i++) {
         if (!string.IsNullOrEmpty(Stories.StoryManager.Stories[i].Name)) {
             packet.AppendParameters(Stories.StoryManager.Stories[i].Name);
         } else {
             packet.AppendParameters("");
         }
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 44
0
 public static void AppendAllSpells(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("allspellsdata");
     for (int i = 1; i <= Moves.MoveManager.Moves.MaxMoves; i++) {
         packet.AppendParameters(
             i.ToString(),
             Moves.MoveManager.Moves[i].Name.Trim(),
             ((int)Moves.MoveManager.Moves[i].RangeType).ToString(),
             Moves.MoveManager.Moves[i].Range.ToString(),
             ((int)Moves.MoveManager.Moves[i].TargetType).ToString(),
             Moves.MoveManager.Moves[i].HitTime.ToString(),
             Moves.MoveManager.Moves[i].HitFreeze.ToIntString());
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 45
0
        public static TcpPacket CreateTournamentSpectateListingPacket()
        {
            TcpPacket packet = new TcpPacket();
            int validTournyCount = 0;
            for (int i = 0; i < TournamentManager.Tournaments.Count; i++) {
                Tournament tourny = TournamentManager.Tournaments[i];
                if (tourny.TournamentStarted == false) {
                    validTournyCount++;
                    packet.AppendParameter(tourny.Name);
                    packet.AppendParameter(tourny.ID);
                    for (int n = 0; n < tourny.RegisteredMembers.Count; n++) {
                        if (tourny.RegisteredMembers[n].Admin) {
                            packet.AppendParameter(tourny.RegisteredMembers[n].Client.Player.Name);
                            break;
                        }
                    }
                }
            }
            packet.PrependParameters("tournamentspectatelisting", validTournyCount.ToString());

            return packet;
        }
Ejemplo n.º 46
0
        /// <summary>
        /// Sends a command to the connected server.
        /// The return value of this function does not signify command success, only if the command was sent.
        /// </summary>
        /// <param name="command">The command type to send.</param>
        /// <param name="args">The arguments to send.</param>
        /// <returns>True if the command was sent; otherwise, false.</returns>
        protected bool SendCommand( byte command, params object[] args )
        {
            try
            {
                using ( TcpPacket packet = new TcpPacket() )
                {
                    packet.Write( command );

                    foreach ( object arg in args )
                    {
                        if ( arg is byte[] )
                            packet.Write( ( byte[] )arg );
                        else if ( arg is string )
                            packet.Write( ( string )arg, Encoding.ASCII );
                        else
                            packet.Write( arg.GetType(), arg );
                    }

                    Socket.Send( packet );
                }

                return true;
            }
            catch
            {
                return false;
            }

        }
Ejemplo n.º 47
0
 public static void AppendAllPokemon(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("allpokemon");
     packet.AppendParameter(Constants.TOTAL_POKEMON);
     for (int i = 1; i <= Constants.TOTAL_POKEMON; i++) {
         packet.AppendParameters(Pokedex.Pokedex.GetPokemon(i).Name,
             Pokedex.Pokedex.GetPokemon(i).Forms.Count.ToString());
         //foreach (Pokedex.PokemonForm form in Pokedex.Pokedex.GetPokemon(i).Forms) {
         //    packet.AppendParameter(form.Sprite[0, 0]);
         //}
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 48
0
        /// <summary>
        /// Attempts to receive a tcp packet from the socket.
        /// </summary>
        /// <returns>The packet.</returns>
        public TcpPacket ReceivePacket()
        {
            TcpPacket pack = new TcpPacket();

            uint size = NetHelpers.EndianSwap( this.Reader.ReadUInt32() );
            byte[] payload = Reader.ReadBytes( ( int )size );

            pack.SetPayload( payload );

            return pack;
        }
Ejemplo n.º 49
0
 public static void AppendInventory(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("playerinv");
     packet.AppendParameter(client.Player.MaxInv);
     for (int i = 1; i <= client.Player.MaxInv; i++) {
         packet.AppendParameters(client.Player.Inventory[i].Num.ToString(),
             client.Player.Inventory[i].Amount.ToString(),
             client.Player.Inventory[i].Sticky.ToIntString());
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 50
0
 public static void AppendJobList(Client client, PacketHitList hitlist)
 {
     //
     TcpPacket packet = new TcpPacket("joblist");
     Player player = client.Player;
     packet.AppendParameter(player.JobList.JobList.Count.ToString());
     for (int i = 0; i < player.JobList.JobList.Count; i++) {
         WonderMailJob job = player.JobList.JobList[i];
         packet.AppendParameters(job.Mission.Title, job.Mission.Summary, job.Mission.GoalName);
         packet.AppendParameters(WonderMailManager.Missions.MissionPools[(int)job.Mission.Difficulty - 1].MissionClients[job.Mission.MissionClientIndex].Species,
             WonderMailManager.Missions.MissionPools[(int)job.Mission.Difficulty - 1].MissionClients[job.Mission.MissionClientIndex].Form,
             (int)job.Mission.MissionType, job.Mission.Data1, job.Mission.Data2, (int)job.Mission.Difficulty,
             WonderMailManager.Missions.MissionPools[(int)job.Mission.Difficulty - 1].Rewards[job.Mission.RewardIndex].ItemNum,
             WonderMailManager.Missions.MissionPools[(int)job.Mission.Difficulty - 1].Rewards[job.Mission.RewardIndex].Amount, job.Mission.Mugshot);
         //MapGeneralInfo mapInfo = MapManager.RetrieveMapGeneralInfo(player.JobList.JobList[i].Mission.Goal);
         packet.AppendParameters((int)player.JobList.JobList[i].Accepted);
         if (player.JobList.JobList[i].SendsRemaining > 0) {
             packet.AppendParameters(1);
         } else {
             packet.AppendParameters(0);
         }
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 51
0
 public static void AppendWornEquipment(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("playerhelditem");
     for (int i = 0; i < Constants.MAX_ACTIVETEAM; i++) {
         if (client.Player.Team[i].Loaded == true) {
             packet.AppendParameter(client.Player.Team[i].HeldItemSlot);
         } else {
             packet.AppendParameter("0");
         }
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 52
0
        public static void AppendMapData(Client client, PacketHitList hitlist, IMap map, Enums.MapID mapType)
        {
            TcpPacket packet = new TcpPacket("mapdata");
            int x, y;
            if (map.MaxX == 0)
                map.MaxX = 19;
            if (map.MaxY == 0)
                map.MaxY = 14;

            packet.AppendParameter((int)mapType);

            packet.AppendParameters(map.MapID,
                                    map.Name.Trim(),
                                    map.Revision.ToString(),
                                    ((int)map.Moral).ToString(),
                                    map.Up.ToString(),
                                    map.Down.ToString(),
                                    map.Left.ToString(),
                                    map.Right.ToString(),
                                    map.Music,
                                    map.Indoors.ToIntString(),
                                    ((int)map.Weather).ToString(),
                                    map.MaxX.ToString(),
                                    map.MaxY.ToString(),
                                    map.Darkness.ToString(),
                                    map.HungerEnabled.ToIntString(),
                                    map.RecruitEnabled.ToIntString(),
                                    map.ExpEnabled.ToIntString(),
                                    map.TimeLimit.ToString(),
                                    map.MinNpcs.ToString(),
                                    map.MaxNpcs.ToString(),
                                    map.NpcSpawnTime.ToString(),
                                    map.Cacheable.ToIntString());

            if (map.MapType == Enums.MapType.Instanced) {
                string mapBase = MapManager.GenerateMapID(((InstancedMap)map).MapBase);
                packet.AppendParameter(mapBase);
            } else {
                packet.AppendParameter("");
            }

            for (y = 0; y <= map.MaxY; y++) {
                for (x = 0; x <= map.MaxX; x++) {
                    packet.AppendParameters(map.Tile[x, y].Ground.ToString(),
                                            map.Tile[x, y].GroundAnim.ToString(),
                                            map.Tile[x, y].Mask.ToString(),
                                            map.Tile[x, y].Anim.ToString(),
                                            map.Tile[x, y].Mask2.ToString(),
                                            map.Tile[x, y].M2Anim.ToString(),
                                            map.Tile[x, y].Fringe.ToString(),
                                            map.Tile[x, y].FAnim.ToString(),
                                            map.Tile[x, y].Fringe2.ToString(),
                                            map.Tile[x, y].F2Anim.ToString(),
                                            ((int)map.Tile[x, y].Type).ToString(),
                                            map.Tile[x, y].Data1.ToString(),
                                            map.Tile[x, y].Data2.ToString(),
                                            map.Tile[x, y].Data3.ToString(),
                                            map.Tile[x, y].String1,
                                            map.Tile[x, y].String2,
                                            map.Tile[x, y].String3,
                                            map.Tile[x, y].RDungeonMapValue.ToString(),
                                            map.Tile[x, y].GroundSet.ToString(),
                                            map.Tile[x, y].GroundAnimSet.ToString(),
                                            map.Tile[x, y].MaskSet.ToString(),
                                            map.Tile[x, y].AnimSet.ToString(),
                                            map.Tile[x, y].Mask2Set.ToString(),
                                            map.Tile[x, y].M2AnimSet.ToString(),
                                            map.Tile[x, y].FringeSet.ToString(),
                                            map.Tile[x, y].FAnimSet.ToString(),
                                            map.Tile[x, y].Fringe2Set.ToString(),
                                            map.Tile[x, y].F2AnimSet.ToString());
                }
            }

            packet.AppendParameter(map.Npc.Count);

            for (x = 0; x < map.Npc.Count; x++) {
                packet.AppendParameters(map.Npc[x].NpcNum,
                                        map.Npc[x].SpawnX,
                                        map.Npc[x].SpawnY,
                                        map.Npc[x].MinLevel,
                                        map.Npc[x].MaxLevel,
                                        map.Npc[x].AppearanceRate,
                                        (int)map.Npc[x].StartStatus,
                                        map.Npc[x].StartStatusCounter,
                                        map.Npc[x].StartStatusChance);
            }

            packet.AppendParameter(map.TempChange.ToIntString());

            packet.FinalizePacket();

            hitlist.AddPacket(client, packet);
        }
Ejemplo n.º 53
0
 public static void AppendAllRDungeons(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("allrdungeons");
     packet.AppendParameter(RDungeons.RDungeonManager.RDungeons.Count);
     for (int i = 0; i < RDungeons.RDungeonManager.RDungeons.Count; i++) {
         packet.AppendParameters(RDungeons.RDungeonManager.RDungeons[i].DungeonName.Trim());
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 54
0
 private static void AppendNpcMoveInternal(IMap map, Combat.ICharacter target, PacketHitList hitlist, TcpPacket packet, IMap borderingMap, Enums.MapID borderingMapID, Client targetClient)
 {
     if (targetClient.Player.GetActiveRecruit() != target) {
         if (AI.MovementProcessor.WillCharacterSeeCharacter(targetClient.Player.Map, targetClient.Player.GetActiveRecruit(), map, MapManager.GetOppositeMapID(borderingMapID), target)) {
             if (!targetClient.Player.IsSeenCharacterSeen(target)) {
                 targetClient.Player.OutdateCharacter(target, Enums.OutdateType.Location);
                 targetClient.Player.AddActivationIfCharacterNotSeen(hitlist, target);
             } else {
                 hitlist.AddPacket(targetClient, packet);
             }
         } else {
             if (targetClient.Player.IsSeenCharacterSeen(target)) {
                 hitlist.AddPacket(targetClient, packet);
                 //unsee character
             } else {
                 targetClient.Player.OutdateCharacter(target, Enums.OutdateType.Location);
             }
         }
     }
 }
Ejemplo n.º 55
0
 public static TcpPacket CreateNpcSpawn(MapNpc mapNpc)
 {
     TcpPacket packet = new TcpPacket("spawnnpc");
         packet.AppendParameters(mapNpc.MapID, mapNpc.MapSlot.ToString(), mapNpc.Num.ToString(), mapNpc.Sprite.ToString(),
             mapNpc.Form.ToString(), ((int)mapNpc.Shiny).ToString(), ((int)mapNpc.Sex).ToString(),
             mapNpc.X.ToString(), mapNpc.Y.ToString(), ((int)mapNpc.Direction).ToString(), ((int)mapNpc.StatusAilment).ToString());
         if (mapNpc.Num > 0) {
             Npc npc = NpcManager.Npcs[mapNpc.Num];
             if (npc.Behavior != Enums.NpcBehavior.Friendly && npc.Behavior != Enums.NpcBehavior.Shopkeeper && npc.Behavior != Enums.NpcBehavior.Scripted) {
                 packet.AppendParameters("1");
             } else {
                 packet.AppendParameters("0");
             }
         }
         packet.FinalizePacket();
         return packet;
 }
Ejemplo n.º 56
0
 public static void AppendAllShops(Client client, PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("allshopsdata");
     for (int i = 1; i <= Shops.ShopManager.Shops.MaxShops; i++) {
         packet.AppendParameters(i.ToString(),
                                 Shops.ShopManager.Shops[i].Name.Trim());
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 57
0
 /// <summary>
 /// Sends the specified packet on the socket.
 /// </summary>
 /// <param name="packet">The packet.</param>
 public void Send( TcpPacket packet )
 {
     this.Send( packet.GetData() );
 }
Ejemplo n.º 58
0
 public static TcpPacket CreatePlayerAllRecruitsPacket(Client client)
 {
     TcpPacket packet = new TcpPacket();
     int recruitCount = 0;
     int[] team = new int[4] { -1, -1, -1, -1 };
     using (DatabaseConnection dbConnection = new DatabaseConnection(DatabaseID.Players)) {
         foreach (AssemblyRecruitData assemblyRecruit in PlayerDataManager.LoadPlayerAssemblyRecruits(dbConnection.Database, client.Player.CharID)) {
             recruitCount++;
             if (client.Player.IsInTeam(assemblyRecruit.RecruitIndex) == false) {
                 int size = 1;
                 //int mugshot = -1;
                 int species = assemblyRecruit.Species;
                 //int sprite = 0;
                 //if (species > -1 && species <= Constants.TOTAL_POKEMON) {
                 //    Pokedex.PokemonForm pokemon = Pokedex.Pokedex.GetPokemonForm(species, assemblyRecruit.Form);
                 //    mugshot = pokemon.Mugshot[assemblyRecruit.Shiny, assemblyRecruit.Sex];
                 //    sprite = pokemon.Sprite[assemblyRecruit.Shiny, assemblyRecruit.Sex];
                 //}
                 packet.AppendParameters(assemblyRecruit.RecruitIndex, species, (int)assemblyRecruit.Sex, assemblyRecruit.Form, (int)assemblyRecruit.Shiny, assemblyRecruit.Level);
                 packet.AppendParameter(assemblyRecruit.Name);
             } else {
                 int teamSlot = client.Player.FindTeamSlot(assemblyRecruit.RecruitIndex);
                 team[teamSlot] = assemblyRecruit.RecruitIndex;
                 //int mugshot = Pokedex.Pokedex.GetPokemonForm(client.Player.Team[teamSlot].Species, client.Player.Team[teamSlot].Form).Mugshot[assemblyRecruit.Shiny, assemblyRecruit.Sex];
                 if (teamSlot > -1 && teamSlot < 4) {
                     packet.AppendParameters(assemblyRecruit.RecruitIndex.ToString(), client.Player.Team[teamSlot].Sprite.ToString(), ((int)client.Player.Team[teamSlot].Sex).ToString(),
                                                 client.Player.Team[teamSlot].Form.ToString(), ((int)client.Player.Team[teamSlot].Shiny).ToString(), client.Player.Team[teamSlot].Level.ToString(), client.Player.Team[teamSlot].Name);
                 }
             }
         }
     }
     packet.PrependParameters("allrecruits", recruitCount.ToString(), team[0].ToString(), team[1].ToString(), team[2].ToString(), team[3].ToString());
     return packet;
 }
Ejemplo n.º 59
0
 public void AppendFriendsList(PacketHitList hitlist)
 {
     TcpPacket packet = new TcpPacket("friendslist");
     packet.AppendParameter(Friends.Count);
     for (int i = 0; i < Friends.Count; i++) {
         Client clientIsOn = ClientManager.FindClient(Friends[i]);
         int ison;
         if (clientIsOn != null) {
             ison = 1;
         } else {
             ison = 0;
         }
         packet.AppendParameters(Friends[i], ison.ToString());
     }
     packet.FinalizePacket();
     hitlist.AddPacket(client, packet);
 }
Ejemplo n.º 60
0
        public static TcpPacket CreateTilePacket(int x, int y, IMap map)
        {
            TcpPacket packet = new TcpPacket("tiledata");

            packet.AppendParameters(
                x.ToString(),
                y.ToString(),
                map.Tile[x, y].Ground.ToString(),
                map.Tile[x, y].GroundAnim.ToString(),
                map.Tile[x, y].Mask.ToString(),
                map.Tile[x, y].Anim.ToString(),
                map.Tile[x, y].Mask2.ToString(),
                map.Tile[x, y].M2Anim.ToString(),
                map.Tile[x, y].Fringe.ToString(),
                map.Tile[x, y].FAnim.ToString(),
                map.Tile[x, y].Fringe2.ToString(),
                map.Tile[x, y].F2Anim.ToString(),
                ((int)map.Tile[x, y].Type).ToString(),
                map.Tile[x, y].Data1.ToString(),
                map.Tile[x, y].Data2.ToString(),
                map.Tile[x, y].Data3.ToString(),
                map.Tile[x, y].String1,
                map.Tile[x, y].String2,
                map.Tile[x, y].String3,
                map.Tile[x, y].RDungeonMapValue.ToString(),
                map.Tile[x, y].GroundSet.ToString(),
                map.Tile[x, y].GroundAnimSet.ToString(),
                map.Tile[x, y].MaskSet.ToString(),
                map.Tile[x, y].AnimSet.ToString(),
                map.Tile[x, y].Mask2Set.ToString(),
                map.Tile[x, y].M2AnimSet.ToString(),
                map.Tile[x, y].FringeSet.ToString(),
                map.Tile[x, y].FAnimSet.ToString(),
                map.Tile[x, y].Fringe2Set.ToString(),
                map.Tile[x, y].F2AnimSet.ToString()
            );

            return packet;
        }