Beispiel #1
0
 /// <summary>
 /// 接收信息
 /// </summary>
 /// <param name="session"></param>
 public bool Receive(IDummySession session, PacketBase pb)
 {
     if (!this.m_mapLink.ContainsKey(session))
     {
         return false;
     }
     this.m_mapLink[session].Receive(pb);
     return true;
 }
Beispiel #2
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketClientUseGameObject packet)
 {
     return(packet.GameObject);
 }
Beispiel #3
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketQuestGiverAcceptQuest packet)
 {
     return(packet.QuestGiver);
 }
 public void Send(PacketBase packet) => Send(CallPacketToString(packet));
Beispiel #5
0
 void OnReceive(PacketBase msg)
 {
     Debug.Log("<=receivecallback msg;;;;;");
     pools.Enqueue(msg);
 }
Beispiel #6
0
 public void SendMsg(PacketBase msg)
 {
     client.SendMsg(msg);
 }
Beispiel #7
0
 protected override UniversalGuid?Process(PacketBase packetBaseData, PacketGossipSelect packet)
 {
     return(packet.GossipUnit);
 }
Beispiel #8
0
 protected override UniversalGuid?Process(PacketBase packetBaseData, PacketGossipClose packet)
 {
     return(packet.GossipSource);
 }
            public PacketWrapper(SerializationInfo information, StreamingContext context)
            {
                _isPseudoPacket = information.GetBoolean("isPseudoPacket");
                _packetNumber	= information.GetInt32("packetNumber");
                _requestNumber	= information.GetInt32("requestNumber");
                _timestamp		= (DateTime)information.GetValue("timestamp", typeof(DateTime));
                _readerIndex	= (int?)information.GetValue("readerIndex", typeof(int?));
                _readerName		= information.GetString("readerName");
                _packetType		= (PacketType?)information.GetValue("packetType", typeof(PacketType?));
                _elapsedMs		= information.GetInt64("elapsedMs");
                _readRequest	= information.GetString("readRequest");

                if (_isPseudoPacket)
                {
                    // _packet = new CommandPsuedoPacket(information.GetString("RequestName"), (object [])information.GetValue("DataValues", typeof(object [])));
                    _packet = new CommandPsuedoPacket(information.GetString("RequestName"), (byte [])information.GetValue("DataValues", typeof(byte[])));
                }
                else
                {
                    Type theType;

                    theType			= GetTypeFromPacketType((PacketType)_packetType);
                    _packet			= (PacketBase)information.GetValue("packet", theType);
                    _rawPacket		= (byte[])information.GetValue("rawPacket", typeof(byte[]));
                //					_commandPacketNumber= (int?)information.GetValue("commandPacketNumber", typeof(int?));
                }
            }
 // Constructor for PacketCallBackFromReader
 public PacketWrapper(PacketData.PacketBase Packet, PacketType type, byte[] packetData, int requestNumber, long elapsedMs, int readerIndex, string readerName)
 {
     _packet			= Packet;
     _packetType		= type;
     _requestNumber	= requestNumber;
     _elapsedMs		= elapsedMs;
     _readerIndex	= readerIndex;
     _readerName		= readerName;
     _rawPacket		= packetData.Clone() as byte[];
     _isPseudoPacket = false;
 }
 public PacketWrapper(PacketData.PacketBase Packet, PacketType type)
 {
     _packet = Packet;
     _packetType = type;
 }
            public PacketWrapper(PacketWrapper envelope)
            {
                if (envelope == null)
                    return;

                _isPseudoPacket		= envelope._isPseudoPacket;
                _packetNumber		= envelope._packetNumber;
                _timestamp			= envelope._timestamp;
                _elapsedMs			= envelope._elapsedMs;
                _readerIndex		= envelope._readerIndex;
                _readerName			= envelope._readerName;
                _packetType			= envelope._packetType;
                _packet				= envelope._packet;
                _rawPacket			= (byte[])(envelope._rawPacket == null ? null : envelope._rawPacket.Clone());
                _requestNumber		= envelope._requestNumber;
            }
 public abstract void Receive(PacketBase pb);
Beispiel #14
0
 public abstract void Send(PacketBase pb);
Beispiel #15
0
 protected override UniversalGuid?Process(PacketBase packetBaseData, PacketPlaySound packet)
 {
     return(packet.Source);
 }
Beispiel #16
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketChat packet)
 {
     return(packet.Sender);
 }
        /// <summary>
        /// ParsePacket
        /// </summary>
        /// <param name="buffer">packet data to be parsed.</param>
        /// <param name="header">output parameter to hold the message header.</param>
        /// <param name="errorMessage">output parameter to hold any error message.</param>
        /// <returns>The packet type of the packet. 
        /// </returns>
        public static PacketType ParsePacket(byte[] buffer, out PacketBase packet, out string errorMessage)
        {
            // Initalize output paramters
            packet = null;
            errorMessage = null;

            // Check parameters
            if (buffer == null)
            {
                errorMessage = SysLogger.LogError(new ArgumentNullException("buffer", "Attempted to parse an empty packet buffer."));
                return PacketType.U_N_D_F_I_N_E_D;
            }

            if (buffer.Length < PREAMBLE_SIZE)
            {
                errorMessage = SysLogger.LogError(new rfidInvalidPacketException(rfidErrorCode.PacketDataTooSmall, buffer, 0));
                return PacketType.U_N_D_F_I_N_E_D;
            }

            // Initialize locals

            PacketType rslt = GetPacketTypeFromBuffer(buffer, 0);
            if (rslt == PacketType.U_N_D_F_I_N_E_D)
            {
                errorMessage = SysLogger.LogError(new rfidInvalidPacketException(rfidErrorCode.UnknownPacketType, buffer, 0));
                return PacketType.U_N_D_F_I_N_E_D;
            }

            packet = PacketData.CreatePacket(rslt);
            try
            {
                Parse_Fields(packet, buffer, 0, FullPacketBytes(buffer, 0));

            } catch (rfidInvalidPacketException exp)
            {
                errorMessage =SysLogger.LogError(exp);
                packet = null;
                return PacketType.U_N_D_F_I_N_E_D;
            }
            return rslt;
        }
Beispiel #18
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketMonsterMove packet)
 {
     return(packet.Mover);
 }
        private static int Find_String_Length(PacketBase body, System.Reflection.FieldInfo info)
        {
            switch (info.DeclaringType.Name)
            {
            case "rfidError":
                switch (info.Name)
                {
                //				case "reason":
                //					return ((Greenwater.rfidError)body).reasonlen;

                default:
                    throw new rfidInvalidPacketException(String.Format("Cannot find the string length of {0}.{1}.", info.DeclaringType.Name, info.Name));
                }

            default:
                throw new rfidInvalidPacketException(String.Format("Cannot find the length of strings in {0}.", info.DeclaringType.Name));
            }
        }
        /// <summary>
        /// Parses a buffer that hold a packet data and updates the packet structure with data from the buffer.
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="buffer"></param>
        /// <param name="offset"></param>
        /// <returns>New offset after parsing the buffer</returns>
        /// 01-01-05-00-03-00-DC-65-C3-3B-02-00-10-00-00-00-00-00-EB-6B
        private static int Parse_Fields(PacketBase obj, byte[] buffer, int offset, int size)
        {
            int offsetLimit = offset + size;

            if (offsetLimit > buffer.Length)
                throw new rfidInvalidPacketException(rfidErrorCode.PacketDataTooSmall, buffer, 0);

            foreach (System.Reflection.FieldInfo info in obj.GetType().GetFields())
            {
                #region Parse Tracing code
            #if false
                if (info.FieldType.IsArray)
                {
                    System.Diagnostics.Debug.WriteLine(String.Format("ParseMessage:: {0}: {1}", info.FieldType.Name, info.Name), "TRACE");
                }
                else
                {
                    System.Diagnostics.Debug.WriteLine(String.Format("ParseMessage:: {0} {1}: {2} = {3}", info.IsInitOnly ? "RO" : "", info.FieldType.Name, info.Name, info.GetValue(obj).ToString()), "TRACE");
                }
            #endif
                #endregion

                switch (info.FieldType.Name)
                {

                case "Byte[]":
                    int arraySize  = 0;
                    if (info.GetValue(obj) != null) // This is for fixed length byte arrays (none right now)
                    {
                        arraySize = ((byte[])info.GetValue(obj)).Length;
                        if (offset + arraySize > offsetLimit)
                            return -1;
                        byte[] newArray = new byte[arraySize];
                        for (int i = 0; i < arraySize; i++)
                            newArray[i] = buffer[offset+i];

                        // Reverse the array if it has tag data
                        if (info.Name == "inventory_data")
                            Array.Reverse(newArray);

                        info.SetValue(obj, newArray);
                    }
                    else
                    {
                        // Variable length array (assume the rest of the packet is the data)
                        arraySize  = buffer.Length - offset;
                        byte[] newArray = new byte[arraySize];
                        for (int i = 0; i < arraySize; i++)
                            newArray[i] = buffer[offset+i];

                        info.SetValue(obj, newArray);
                    }
                    offset += arraySize;
                    //				binaryWriter.Write((byte[])info.GetValue(obj), 0, arraySize);
                    break;

                case "Byte":
                    if (offset + 1 > offsetLimit)
                        return -1;

                    if (info.IsInitOnly)
                    {
                        if ((byte)info.GetValue(obj) != (byte)buffer[offset])
                            throw new rfidInvalidPacketFieldException(info.Name, info.GetValue(obj).ToString(), buffer[offset].ToString());
                    }
                    else
                    {
                        info.SetValue(obj, buffer[offset]);
                    }
                    offset += 1;
                    break;

                case "UInt16":
                    if (offset + 2 > offsetLimit)
                        return -1;

                    if (info.IsInitOnly)
                    {
                        if ((UInt16)info.GetValue(obj) != Parse_UInt16(buffer, offset))
                            throw new rfidInvalidPacketFieldException(info.Name, info.GetValue(obj).ToString(), Parse_UInt16(buffer, offset).ToString());
                    }
                    else
                    {
                        info.SetValue(obj, Parse_UInt16(buffer, offset));
                    }
                    offset += 2;
                    break;

                case "UInt32":
                    if (offset + 4 > offsetLimit)
                        return -1;

                    if (info.IsInitOnly)
                    {
                        if ((UInt32)info.GetValue(obj) != Parse_UInt32(buffer, offset))
                            throw new rfidInvalidPacketFieldException(info.Name, info.GetValue(obj).ToString(), Parse_UInt32(buffer, offset).ToString());
                    }
                    else
                    {
                        info.SetValue(obj, Parse_UInt32(buffer, offset));
                    }
                    offset += 4;
                    break;

                case "String":
                    int strlen = Find_String_Length(obj, info);
                    if (offset + 12 > offsetLimit)
                        return -1;
                    info.SetValue(obj, Parse_String(buffer, offset, strlen));
                    offset += strlen;
                    break;

                //					case "Char[]":
                //						binaryWriter.Write((char[])info.GetValue(obj));
                //						break;

                default:
                    throw new ApplicationException("Parse_Fields Error " + info.Name + "(" + info.FieldType.Name + ") is an unsupported type.");
                }
            }
            return offset;
        }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase packet, ref Peer pPlayer)
        {
            GCNewItemBox pPacket = (GCNewItemBox)packet;

            //当前流程是主流程
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager pObjectManager = CObjectManager.Instance;

                //检查位置是否合法
                fVector2 pos = new fVector2(pPacket.Position.m_fX, pPacket.Position.m_fZ);
                if (!WorldManager.Instance.ActiveScene.IsValidPosition(ref pos))
                {
                    LogManager.LogError("Valid Position @GCNewItemBoxHandler.Execute");
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_ERROR);
                }

                if ((int)ITEMBOX_TYPE.ITYPE_DROPBOX == pPacket.ObjectType)
                {
                    bool    bMustCreater = true;
                    CObject pObj         = (CObject)(pObjectManager.FindServerObject((int)pPacket.MonsterID));
                    if (pObj != null && pObj is CObject_Character)
                    {
                        CObject_Character pCharacter = (CObject_Character)pObj;
                        if (!pCharacter.IsDie())
                        {
                            uint      idItemBox = (uint)pPacket.ObjectID;
                            uint      idOwner   = (uint)pPacket.OwnerID;
                            WORLD_POS posCreate = pPacket.Position;
                            pCharacter.AddDropBoxEvent(idItemBox, idOwner, ref posCreate);
                            bMustCreater = false;
                        }
                    }

                    if (bMustCreater)
                    {
                        //创建ItemBox
                        CTripperObject_ItemBox pBox = (CTripperObject_ItemBox)CObjectManager.Instance.NewTripperItemBox((int)pPacket.ObjectID);
                        pBox.Initial(null);
                        //设置位置
                        pBox.SetMapPosition(pPacket.Position.m_fX, pPacket.Position.m_fZ);
                        //设置掉落箱的归属
                        pBox.SetOwnerGUID((uint)pPacket.OwnerID);

                        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_DROP_ITEMBOX);
                    }
                }
                else
                {
                    //创建矿物生长点
                    CTripperObject_Resource pResource = (CTripperObject_Resource)CObjectManager.Instance.NewTripperResource((int)pPacket.ObjectID);
                    if (!(pResource.SetResourceID((int)pPacket.ObjectType)))
                    {
                        //非法的资源ID
                        CObjectManager.Instance.DestroyObject(pResource);
                        return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                    }
                    pResource.Initial(null);
                    //设置位置
                    pResource.SetMapPosition(pPacket.Position.m_fX, pPacket.Position.m_fZ);
                    jhCount++;
                }
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Beispiel #22
0
 public void SendMsg(PacketBase msg, PacketType cmd, System.Action <PacketBase> callback)
 {
     AddEventOnceListener((int)cmd, callback);
     client.SendMsg(msg);
 }
 /// <summary>
 /// Adds the packet to the output queue.
 /// </summary>
 /// <param name="packet">message to be sent</param>
 /// <param name="client">client receiver</param>
 public static void Send(PacketBase packet, NetPeer client)
 {
     instance.baseServer.AddOutputMessage(new NetMessage(packet, client));
 }
Beispiel #24
0
    void Update()
    {
        //////////////////////////////////////
        if (Application.internetReachability == NetworkReachability.NotReachable)
        {
/*            if (client.onlineHallSocket == true)
 *              Game.DialogMgr.PushDialog(UIDialog.SingleBtnDialog, "没有联网!");
 *          if (client.onlineMsgSocket == true)
 *              Game.DialogMgr.PushDialog(UIDialog.SingleBtnDialog, "没有联网!");
 *          if (client.onlineGameSockett == true)
 *              Game.DialogMgr.PushDialog(UIDialog.SingleBtnDialog, "没有联网!");
 */

            Debug.LogFormat("没有联网!!!");
            if (Game.SocketGame.SocketNetTools.client != null)
            {
                client.onlineGameSockett = false;
                Game.SocketGame.SocketNetTools.StopClient();
            }

            /*         if (Game.SocketHall.SocketNetTools.client != null)
             *       {
             *           client.onlineHallSocket = false;
             *           Game.SocketHall.SocketNetTools.StopClient();
             *       }
             *       if (Game.SocketMsg.SocketNetTools.client != null)
             *       {
             *           client.onlineMsgSocket = false;
             *           Game.SocketMsg.SocketNetTools.StopClient();
             *       }*/
        }

        if (Application.internetReachability == NetworkReachability.ReachableViaLocalAreaNetwork)
        {
            /*        if (client != null && client.onlineHallSocket == false)
             *      {
             *          StopClient();
             *
             *          string gameserver = "daqingmj.youhao88.com:5000";
             *          Game.InitHallSocket(gameserver);
             *          //               Game.DialogMgr.OnBackPressed();
             *
             *          client.onlineHallSocket = true;
             *
             *      }
             *      if (client != null && client.onlineMsgSocket == false)
             *      {
             *          StopClient();
             *
             *          string gameserver = "daqingmj.youhao88.com:4000";
             *          Game.InitMsgSocket(gameserver);
             *          //               Game.DialogMgr.OnBackPressed();
             *
             *          client.onlineMsgSocket = true;
             *
             *      }*/
            if (client != null && client.onlineGameSockett == false)
            {
                Game.SocketGame.SocketNetTools.StopClient();

                string gameserver = "daqingmj.youhao88.com:7000";
                Game.InitGameSocket(gameserver);
//                Game.DialogMgr.OnBackPressed();

                client.onlineGameSockett = true;
            }



//            Debug.LogFormat("使用Wi-Fi!!!");
        }

        if (Application.internetReachability == NetworkReachability.ReachableViaCarrierDataNetwork)
        {
            /*          if (client != null && client.onlineHallSocket == false)
             *        {
             *            StopClient();
             *
             *            string gameserver = "daqingmj.youhao88.com:5000";
             *            Game.InitHallSocket(gameserver);
             * //                Game.DialogMgr.OnBackPressed();
             *
             *            client.onlineHallSocket = true;
             *
             *        }
             *        if (client != null && client.onlineMsgSocket == false)
             *        {
             *            StopClient();
             *
             *            string gameserver = "daqingmj.youhao88.com:4000";
             *            Game.InitMsgSocket(gameserver);
             * //                Game.DialogMgr.OnBackPressed();
             *
             *            client.onlineMsgSocket = true;
             *
             *        }*/

            if (client != null && client.onlineGameSockett == false)
            {
                Game.SocketGame.SocketNetTools.StopClient();

                string gameserver = "daqingmj.youhao88.com:7000";
                Game.InitGameSocket(gameserver);
                //               Game.DialogMgr.OnBackPressed();

                client.onlineGameSockett = true;
            }



//            Debug.LogFormat("使用移动网络!!!");
        }
        /////////////////////////////////////////

        /*      if (Game.SocketHall.SocketNetTools.Connected == false)
         *    {
         *        if (Game.SocketHall.SocketNetTools.client != null)
         *        {
         *            string gameserver = "daqingmj.youhao88.com:5000";
         *            Game.InitHallSocket(gameserver);
         *        }
         *    }
         *    if (Game.SocketMsg.SocketNetTools.Connected == false)
         *    {
         *        if (Game.SocketMsg.SocketNetTools.client != null)
         *        {
         *
         *            string gameserver = "daqingmj.youhao88.com:4000";
         *            Game.InitMsgSocket(gameserver);
         *        }
         *    }*/
        /*      if (Game.SocketGame.SocketNetTools.Connected == false)
         *    {
         *        if (Game.SocketGame.SocketNetTools.client != null)
         *        {
         *            Game.SocketGame.SocketNetTools.StopClient();
         *            string gameserver = "daqingmj.youhao88.com:7000";
         *            Game.InitGameSocket(gameserver);
         *
         *        }
         *    }else
         *    {
         *
         * //           PacketBase testmsg = new PacketBase() { packetType = PacketType.HEARTBEAT };
         * //           Game.SocketGame.SocketNetTools.client.SendMsg(testmsg);
         *    }
         */
        /////////////////////////////////////
        if (connectFinish)
        {
            connectFinish = false;
            if (null != OnConnect)
            {
                OnConnect();
            }
        }
        if (pools.Count > 0)
        {
            PacketBase msg = pools.Dequeue();
            if (null != msg)
            {
                DispatchEvent((int)msg.packetType, msg);
                DispatchOnceEvent((int)msg.packetType, msg);
            }
        }
    }
 /// <summary>
 /// Adds the packet to the output queue, for every client except the given one.
 /// </summary>
 /// <param name="packet">data to be sent</param>
 /// <param name="client">client excluded (usually the original sender)</param>
 public static void SendExcluding(PacketBase packet, NetPeer client)
 {
     instance.baseServer.AddMessageExcluding(packet, client);
 }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase Packet, ref Peer pPlayer)
        {
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                LogManager.Log("Receive GCPickResult Packet");
                GCPickResult   pPacket        = (GCPickResult)Packet;
                CObjectManager pObjectManager = CObjectManager.Instance;
                CDataPool      pDataPool      = GameProcedure.s_pDataPool;
                //if( pPacket.getItemBoxId() != pDataPool.GetItemBoxID() )

                bool bLog = (GameProcedure.s_pUISystem != null)?true:false;
                // 放置每一个物品
                if (pPacket.getResult() == (byte)PickResultCode.PICK_SUCCESS)
                {
                    int          nIndex = 0;
                    CObject_Item pItem  = CDataPool.Instance.ItemBox_GetItem(
                        pPacket.getItemID().m_World,
                        pPacket.getItemID().m_Server,
                        pPacket.getItemID().m_Serial,
                        ref nIndex);

                    if (pItem == null)
                    {
                        if (bLog)
                        {
                            GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, "内部错误,非法的物品GUID!");
                        }
                        return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                    }

                    // 先保存物品名称,后面可能会删除掉落包里的物品 [6/13/2011 ivan edit]
                    string strItemName = pItem.GetName();

                    //如果发生物品转移,(从箱子里面移到包裹里),则改变客户端id,以表示在客户端是不同物体
                    ObjectSystem.Instance.ChangeItemClientID(pItem);
                    ((CObject_Item)pItem).SetTypeOwner(ITEM_OWNER.IO_MYSELF_PACKET);

                    CObject_Item pItemBag = CDataPool.Instance.UserBag_GetItem(pPacket.getBagIndex());
                    if (pItemBag != null)
                    {            //有东西,应该一定是一类物品
                        if (pItem.GetIdTable() == pItemBag.GetIdTable())
                        {        //同一类物品
                            //CDataPool.GetMe().ItemBox_SetItem(nIndex, NULL, FALSE);
                            // 不删除会泄露内存 [6/10/2011 ivan edit]
                            CDataPool.Instance.ItemBox_SetItem(nIndex, null, true);
                        }
                        else
                        {
                            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                        }
                    }
                    else
                    {            //没东西
                        //存入数据池
                        CDataPool.Instance.UserBag_SetItem(pPacket.getBagIndex(), pItem, true, true);
                        CDataPool.Instance.ItemBox_SetItem(nIndex, null, false);

                        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_GET_NEWEQUIP, pItem.GetID());
                    }

                    //通知ActionButton
                    CActionSystem.Instance.UserBag_Update();
                    CActionSystem.Instance.ItemBox_Update();

                    //产生ui事件
                    if (bLog)
                    {
                        //ADDTALKMSG(strItemName); //todo
                    }

                    CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_LOOT_SLOT_CLEARED);
                    CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_PACKAGE_ITEM_CHANGED, pPacket.getBagIndex());

                    //如果掉落箱空,关闭
                    if (CDataPool.Instance.ItemBox_GetNumber() == 0)
                    {
                        CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_LOOT_CLOSED);
                    }
                }
                else
                {
                    switch (pPacket.getResult())
                    {
                    case (byte)PickResultCode.PICK_BAG_FULL:
                    {
                        if (bLog)
                        {
                            GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("背包已满!"));
                        }
                        //CSoundSystemFMod._PlayUISoundFunc(96); todo
                    }
                    break;

                    case (byte)PickResultCode.PICK_INVALID_OWNER:
                    {
                        if (bLog)
                        {
                            GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("不属于自己的背包!"));
                        }
                    }
                    break;

                    case (byte)PickResultCode.PICK_INVALID_ITEM:
                    {
                        if (bLog)
                        {
                            GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("非法物品!"));
                        }
                    }
                    break;

                    case (byte)PickResultCode.PICK_TOO_FAR:
                    {
                        if (bLog)
                        {
                            GameProcedure.s_pEventSystem.PushEvent(GAME_EVENT_ID.GE_INFO_SELF, ("距离太远!"));
                        }
                    }
                    break;

                    default:
                        break;
                    }
                }
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Beispiel #27
0
 void OnMsgCome(PacketBase msg)
 {
 }
Beispiel #28
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketQuestGiverCompleteQuestRequest packet)
 {
     return(packet.QuestGiver);
 }
Beispiel #29
0
 protected override Unit Process(PacketBase packetBaseData, PacketGossipHello packet)
 {
     Console.WriteLine("Talking to " + packet.GossipSource.Entry);
     return(default);
Beispiel #30
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketClientQuestGiverChooseReward packet)
 {
     return(packet.QuestGiver);
 }
Beispiel #31
0
        /// <summary>
        /// Reads data from incoming stream (if bytes exist in buffer).  Tries to construct
        /// one or more game packets. Fires event for each valid game packet.
        /// </summary>
        private void ReadData()
        {
            try
            {
                //vars
                List <byte[]> packets = new List <byte[]>();

                //lock queue
                lock (_incomingQueue)
                {
                    //return if zero bytes
                    if (_incomingQueue.Count == 0)
                    {
                        return;
                    }

                    //queue overflow?
                    if (_incomingQueue.Count > 100000)
                    {
                        Log.Write($"ReadData: Incoming byte queue overflow");
                        _incomingQueue.Clear();
                    }

                    //loop
                    while (true)
                    {
                        //break if zero bytes
                        if (_incomingQueue.Count == 0)
                        {
                            break;
                        }

                        //find first four matching footer bytes (terminator)
                        int firstIndex = FindToken(_incomingQueue, PacketBase.PACKET_FOOTER);

                        //break if no footer
                        if (firstIndex == -1)
                        {
                            Log.Write($"ReadData: Incomplete data ({_incomingQueue.Count} bytes) left in buffer");
                            break;
                        }

                        //dequeue bytes
                        int    count = firstIndex + 4;
                        byte[] bytes = _incomingQueue.Dequeue(count).ToArray();

                        //add to list
                        packets.Add(bytes);
                    }
                }

                //return if no new packets
                if (packets.Count <= 0)
                {
                    return;
                }

                //loop through packet (candidates)
                foreach (byte[] bytes in packets)
                {
                    //reject if invalid
                    PacketBase packet = PacketBase.FromBytes(bytes);
                    if (packet == null)
                    {
                        Log.Write($"ReadData: Invalid packet from '{_remoteIP}' with {bytes.Length} bytes was discarded");
                        continue;
                    }

                    //fire event
                    PacketReceived?.InvokeFromTask(this, packet);   //WARNING, CHANGED THIS!!
                }
            }
            catch (Exception ex)
            {
                _stop = true;
                Log.Write("ReadData: Error reading or processing data");
                ErrorHandler.LogError(ex);
            }
        }
Beispiel #32
0
 protected override UniversalGuid?Process(PacketBase packetBaseData, PacketEmote packet)
 {
     return(packet.Sender);
 }
Beispiel #33
0
 static string CallPacketToString(PacketBase packet) => NetworkSystem.PacketToString(packet);
Beispiel #34
0
 protected override UniversalGuid?Process(PacketBase packetBaseData, PacketSpellStart packet)
 {
     return(packet.Data?.Caster);
 }
Beispiel #35
0
 public static void Send(PacketBase packet)
 {
     clients.ForEach(x => x.Send(packet));
 }
Beispiel #36
0
 protected override UniversalGuid?Process(PacketBase packetBaseData, PacketAuraUpdate packet)
 {
     return(packet.Unit);
 }
Beispiel #37
0
        public static void SendMessage(Client recipient, PacketType packetType, object data)
        {
            if (recipient == null)
            {
                return;
            }


#if DEBUG
            //
            // If we're debugging, make sure that the data type matches that required by the packetType, or else throw an exception.
            //

            var type = DataPacket.PacketTypeMap[packetType];

            if (type != null)
            {
                var testObject = Convert.ChangeType(data, type);
            }
            else
            {
                if (data != null)
                {
                    throw new ArgumentException("Data from this packet type was expected to be null, but wasn't.");
                }
            }
#endif

            // ToDo: Don't hardcode Packet Version 1 here.  Instead, add a packet version property to Client, and switch on that.
            var packetBase = new PacketBase {
                PacketVersion = PacketVersion.Version1
            };

            var packetV1 = new PacketV1
            {
                PacketType = packetType,
                Data       = data,
                Sender     = ServerName
            };

            packetV1.Recipients.Add(recipient.UserInfo.EmailAddress);

            packetBase.Data = packetV1;

            dynamic baseBuffer;

            using (var stream = new MemoryStream())
            {
                var binaryWriter = new BinaryWriter(stream);

                packetBase.Write(binaryWriter);

                baseBuffer = stream.ToArray();
            }

            var messageSize = baseBuffer.Length;

            byte[] bytes = BitConverter.GetBytes(messageSize);

            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(bytes);
            }


            var offset = 0;

            var messageBuffer = new byte[sizeof(uint) + messageSize];

            bytes.CopyTo(messageBuffer, offset);

            offset += sizeof(uint);

            baseBuffer.CopyTo(messageBuffer, offset);

            recipient.Send(messageBuffer);
        }
Beispiel #38
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketPhaseShift packet)
 {
     return(packet.Client);
 }
        public override NET_RESULT_DEFINE.PACKET_EXE Execute(PacketBase pPack, ref Peer pPlayer)
        {
            LogManager.Log("RECV GCCharEquipment Packet ");
            if (GameProcedure.GetActiveProcedure() == (GameProcedure)GameProcedure.s_ProcMain)
            {
                CObjectManager  pObjectManager = CObjectManager.Instance;
                GCCharEquipment pPacket        = (GCCharEquipment)pPack;
                CObject         pObj           = (CObject)(pObjectManager.FindServerObject((int)pPacket.getObjID()));
                if (pObj == null || !(pObj is CObject_Character))
                {
                    return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
                }

                /*
                 *              static UINT pBuf[UPDATE_CHAR_ATT_NUMBERS];
                 *              pPacket.FillParamBuf( (VOID*)pBuf );
                 *
                 *              SCommand_Object cmdTemp;
                 *              cmdTemp.m_wID			= OC_UPDATE_EQUIPMENT;
                 *              cmdTemp.m_adwParam[0]	= pPacket.getFlags();
                 *              cmdTemp.m_apParam[1]	= (VOID*)pBuf;
                 *              pObj.PushCommand(&cmdTemp );
                 */
                //刷入数据池
                CCharacterData pCharacterData = ((CObject_Character)pObj).GetCharacterData();
                //		if(pObj == (CObject*)CObjectManager::GetMe().GetMySelf())
                {
                    uint dwEquipFlag = pPacket.getFlags();

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_WEAPON)) != 0)
                    {
                        pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_WEAPON, (int)pPacket.getWeaponGemID());
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_WEAPON, (int)pPacket.getWeaponID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_CAP)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_CAP, (int)pPacket.getCapID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_ARMOR)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_ARMOR, (int)pPacket.getArmourID());
                        pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_ARMOR, (int)pPacket.getArmourGemID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_CUFF)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_CUFF, (int)pPacket.getCuffID());
                    }

                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_BOOT)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_BOOT, (int)pPacket.getBootID());
                    }

                    //  [8/30/2010 Sun]
                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_BACK)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_BACK, (int)pPacket.getBackID());
                    }

                    // 支持进入游戏时,服务器刷新肩甲 [4/27/2011 ivan edit]
                    if ((dwEquipFlag & (1 << (int)HUMAN_EQUIP.HEQUIP_SASH)) != 0)
                    {
                        pCharacterData.Set_Equip(HUMAN_EQUIP.HEQUIP_SASH, (int)pPacket.getSashID());
                        pCharacterData.Set_EquipGem(HUMAN_EQUIP.HEQUIP_SASH, (int)pPacket.getSashGemID());
                    }
                }

                pObj.PushDebugString("GCCharEquipment");
                pObj.SetMsgTime(GameProcedure.s_pTimeSystem.GetTimeNow());
            }
            return(NET_RESULT_DEFINE.PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Beispiel #40
0
 protected override UniversalGuid?Process(PacketBase basePacket, PacketPlayMusic packet)
 {
     return(packet.Target);
 }
Beispiel #41
0
 public abstract PACKET_EXC_RES Execute( Dispatch dispatch , PacketBase packet);