Exemplo n.º 1
0
    /// <summary>
    /// 发送数据
    /// </summary>
    /// <param name="cs"></param>
    /// <param name="msgBase"></param>
    public void Send(ClientSocket cs, SCPacketBase msgBase)
    {
        KDCommon.Log("send=" + (CMD)msgBase.Id, LogType.Info);
        if (cs == null || !cs.Socket.Connected)
        {
            return;
        }
        bool serializeResult = false;

        try {
            cs.SendState.Reset();
            serializeResult = ET_NetworkChannelHelper.Serialize(msgBase, cs.SendState.Stream);

            try {
                if (serializeResult)
                {
                    cs.SendState.Stream.Position = 0L;
                    SendAsync(cs);
                }
            }
            catch (SocketException ex) {
                Debug.LogError("Socket BeginSend Error:" + ex);
            }
        }
        catch (SocketException ex) {
            Debug.LogError("Socket发送数据失败:" + ex);
        }
        cs.SendState.Stream.Position = 0L;
    }
 public sealed override void Handle(object sender, Packet packet)
 {
     if (packet.GetType().BaseType == typeof(SCPacketBase))
     {
         SCPacketBase msg = packet as SCPacketBase;
         GameEntry.Net.ProcessMsg(msg);
     }
 }
Exemplo n.º 3
0
    public void ProcessMsg(SCPacketBase msg)
    {
        m_LastPongTime = GameEntry.Timer.GetTimeStamp();
        Debug.Log("receive from server:" + (CMD)msg.Id);
        if (msg.error != (int)ErrorCode.None)
        {
            switch ((ErrorCode)msg.error)
            {
            case ErrorCode.ServerDataError:
                PECommon.Log("服务器数据异常", LogType.Error);
                GameEntry.UI.AddTips("客户端数据异常");
                break;

            case ErrorCode.UpdateDBError:
                PECommon.Log("数据库更新异常", LogType.Error);
                GameEntry.UI.AddTips("网络不稳定");
                break;

            case ErrorCode.ClientDataError:
                PECommon.Log("客户端数据异常", LogType.Error);
                break;

            case ErrorCode.AcctIsOnline:
                GameEntry.UI.AddTips("当前账号已经上线");
                break;

            case ErrorCode.WrongPass:
                GameEntry.UI.AddTips("密码错误");
                break;

            case ErrorCode.LackLevel:
                GameEntry.UI.AddTips("角色等级不够");
                break;

            case ErrorCode.LackCoin:
                GameEntry.UI.AddTips("金币数量不够");
                break;

            case ErrorCode.LackCrystal:
                GameEntry.UI.AddTips("水晶数量不够");
                break;

            case ErrorCode.LackDiamond:
                GameEntry.UI.AddTips("钻石数量不够");
                break;

            case ErrorCode.LackPower:
                GameEntry.UI.AddTips("体力值不足");
                break;
            }
            return;
        }
        OnReceiveSCPacketBaseEventArgs eventArgs = ReferencePool.Acquire <OnReceiveSCPacketBaseEventArgs>();

        eventArgs.Fill((CMD)msg.Id, msg);
        GameEntry.Event.FireNow(this, eventArgs);
    }
Exemplo n.º 4
0
    /// <summary>
    /// 初始化网络频道辅助器
    /// </summary>
    /// <param name="networkChannel"></param>
    public void Initialize(INetworkChannel networkChannel)
    {
        m_NetworkChannel = networkChannel;

        //反射查找类型,注册消息包和处理函数
        Type     packetBaseType        = typeof(SCPacketBase);
        Type     packetHandlerBaseType = typeof(PacketHandlerBase);
        Assembly assembly = Assembly.GetExecutingAssembly();

        Type[] types = assembly.GetTypes();
        int    len   = types.Length;

        for (int i = 0; i < len; i++)
        {
            if (!types[i].IsClass || types[i].IsAbstract)
            {
                continue;
            }

            if (types[i].BaseType == packetBaseType)
            {
                //注册消息包
                SCPacketBase packetBase = (SCPacketBase)Activator.CreateInstance(types[i]);
                Type         packetType = GetServerToClientPacketType(packetBase.Id);
                if (packetType != null)
                {
                    Log.Warning("Already exist packet type '{0}', check '{1}' or '{2}'?.", packetBase.Id.ToString(), packetType.Name, packetBase.GetType().Name);
                    continue;
                }
                else
                {
                    m_ServerToClientPacketTypes.Add(packetBase.Id, types[i]);
                }
            }
            else if (types[i].BaseType == packetHandlerBaseType)
            {
                //注册消息处理
                IPacketHandler handler = (IPacketHandler)Activator.CreateInstance(types[i]);
                m_NetworkChannel.RegisterHandler(handler);
            }
        }

        GameManager.Event.Subscribe(UnityGameFramework.Runtime.NetworkConnectedEventArgs.EventId, OnNetworkConnected);
        GameManager.Event.Subscribe(UnityGameFramework.Runtime.NetworkClosedEventArgs.EventId, OnNetworkClosed);
        GameManager.Event.Subscribe(UnityGameFramework.Runtime.NetworkErrorEventArgs.EventId, OnNetworkError);
        GameManager.Event.Subscribe(UnityGameFramework.Runtime.NetworkCustomErrorEventArgs.EventId, OnNetworkCustomError);
        GameManager.Event.Subscribe(UnityGameFramework.Runtime.NetworkMissHeartBeatEventArgs.EventId, OnNetworkMissHeartBeat);
    }
Exemplo n.º 5
0
 public OnReceiveSCPacketBaseEventArgs Fill(CMD msgID, SCPacketBase scPacketBase)
 {
     this.msgID        = msgID;
     this.scPacketBase = scPacketBase;
     return(this);
 }
Exemplo n.º 6
0
 public void SendMsg(SCPacketBase msg)
 {
     m_ServerSocket.Send(this, msg);
 }
Exemplo n.º 7
0
    public static void SetKey(SCPacketBase key)
    {
        RspSecret msgSecret = key as RspSecret;

        SecretKey = msgSecret.Secret;
    }