/// <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); } }
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); }
/// <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); }
public OnReceiveSCPacketBaseEventArgs Fill(CMD msgID, SCPacketBase scPacketBase) { this.msgID = msgID; this.scPacketBase = scPacketBase; return(this); }
public void SendMsg(SCPacketBase msg) { m_ServerSocket.Send(this, msg); }
public static void SetKey(SCPacketBase key) { RspSecret msgSecret = key as RspSecret; SecretKey = msgSecret.Secret; }