Example #1
0
 public void SendToServer(Packet p)
 {
     this.Server.GetStream().Write(p.Data.ToArray(), 0, (int)p.Data.Length);
     this.Server.GetStream().Flush();
     Logger.Log(BitConverter.ToString(p.PacketData, 0, p.PacketData.Length) + "len: " + p.PacketData.Length + " Sent To Server");
 }
        private void HandlePacketFromServer(byte[] data, TcpClient client)
        {
            //HandlersEvents.Add(0x8c, this._0x8CConnectToGameServer);
            UOStream Data = new UOStream(data);
            Packet packet = new Packet();
            if (data == null) {
                return; }
            if (data.Length < 1) {
                return;
            }
            Data.Position = 0;
            while (Data.Position < Data.Length - 1)
            {
                if (HandlersServer.ContainsKey(Data.PeekBit()))
                {
                    var olddatapos = Data.Position;
                    packet = (Packet)Activator.CreateInstance(HandlersServer[Data.PeekBit()], new object[] { Data });
                    //Logger.Log(packet.OpCode.ToString("x") + "  Handled from Server");
                    Logger.Log(BitConverter.ToString(packet.PacketData, (int)olddatapos, (int)(Data.Position - olddatapos)) + "  Handled from Server");
                    var eventinfo = this.GetType().GetField(packet.GetType().Name, BindingFlags.Instance
                        | BindingFlags.NonPublic);

                    if (eventinfo != null)
                    {
                        var member = eventinfo.GetValue(this);
                        if (member != null)
                        {
                            //Logger.Log(member.ToString());
                            member.GetType().GetMethod("Invoke").Invoke(member, new object[] { packet });
                        }
                        else
                        {
                            //Logger.Log("MEMBER WAS NULL FOR EVENT: " + eventinfo.Name);
                        }

                    }
                    else
                    {
                        //Logger.Log("EVENTFIELD WAS NULL FOR PACKET : " + packet.ToString());
                    }
                }
                else
                {
                    Logger.Log(Data.PeekBit().ToString("x") + BitConverter.ToString(Data.ToArray(), (int)Data.Position, (int)(Data.Length-Data.Position)) + "No Server Handler");
                    break;
                }
                if (Data.Position < Data.Length -1)
                {

                    byte[] tempdata = new byte[Data.Length - Data.Position];
                    Array.Copy(Data.ToArray(), Data.Position, tempdata, 0, Data.Length - Data.Position);
                    Data = new UOStream(tempdata);
                    Logger.Log("IT HAPPENED! Data left after parsing packet" + BitConverter.ToString(tempdata, 0, (int)tempdata.Length));
                    // this should never happen
                }

            }

            return;
        }