/// <summary> /// 填充用户自定义网络错误事件 /// </summary> /// <param name="socketTcpRoutine">Socket</param> /// <param name="customErrorData">用户自定义网络错误</param> /// <returns>用户自定义网络错误事件</returns> public SocketCustomErrorGameEvent Fill(SocketTcpRoutine socketTcpRoutine, object customErrorData) { Socket = socketTcpRoutine; CustomErrorData = customErrorData; return(this); }
private void OnSocketClosed(SocketTcpRoutine socketTcpRoutine) { if (socketTcpRoutine.Name.Equals("MainSocket") && !socketTcpRoutine.Connected) { m_IsConnectToMainSocket = false; } GameEntry.Event.CommonEvent.Dispatch(this, GameEntry.Pool.SpawnClassObject <SocketClosedGameEvent>().Fill(socketTcpRoutine)); }
/// <summary> /// 填充网络错误事件 /// </summary> /// <param name="socketTcpRoutine">Socket</param> /// <param name="errorCode">获取错误码</param> /// <param name="errorMessage">错误信息</param> /// <returns>网络错误事件</returns> public SocketErrorGameEvent Fill(SocketTcpRoutine socketTcpRoutine, NetworkErrorCode errorCode, string errorMessage) { Socket = socketTcpRoutine; ErrorCode = errorCode; ErrorMessage = errorMessage; return(this); }
private void OnSocketCustomError(SocketTcpRoutine socketTcpRoutine, object customErrorData) { if (SocketCustomErrorEvent != null) { lock (SocketCustomErrorEvent) { SocketCustomErrorEvent(socketTcpRoutine, customErrorData); } } }
private void OnSocketError(SocketTcpRoutine socketTcpRoutine, NetworkErrorCode errorCode, string errorMessage) { if (SocketErrorEvent != null) { lock (SocketErrorEvent) { SocketErrorEvent(socketTcpRoutine, errorCode, errorMessage); } } }
private void OnSocketClosed(SocketTcpRoutine socketTcpRoutine) { if (SocketClosedEvent != null) { lock (SocketClosedEvent) { SocketClosedEvent(socketTcpRoutine); } } }
/// <summary> /// 获取Socket /// </summary> /// <param name="name">Socket名称</param> /// <returns>要获取的Socket</returns> public SocketTcpRoutine GetSocketTcpRoutine(string name) { SocketTcpRoutine socketTcpRoutine = null; if (m_SocketTcpRoutines.TryGetValue(name ?? string.Empty, out socketTcpRoutine)) { return(socketTcpRoutine); } return(null); }
/// <summary> /// 获取所有Socket /// </summary> /// <returns>所有Socket</returns> public SocketTcpRoutine[] GetAllSocketTcpRoutines() { int index = 0; SocketTcpRoutine[] results = new SocketTcpRoutine[m_SocketTcpRoutines.Count]; foreach (KeyValuePair <string, SocketTcpRoutine> SocketTcpRoutine in m_SocketTcpRoutines) { results[index++] = SocketTcpRoutine.Value; } return(results); }
public override void Dispose() { foreach (KeyValuePair <string, SocketTcpRoutine> socketTcpRoutines in m_SocketTcpRoutines) { SocketTcpRoutine socket = socketTcpRoutines.Value; socket.SocketConnected -= OnSocketConnected; socket.SocketClosed -= OnSocketClosed; socket.SocketError -= OnSocketError; socket.SocketCustomError -= OnSocketCustomError; socket.Shutdown(); } m_SocketTcpRoutines.Clear(); }
/// <summary> /// 销毁网络频道 /// </summary> /// <param name="name">网络频道名称</param> /// <returns>是否销毁网络频道成功</returns> public bool DestroySocketTcpRoutine(string name) { SocketTcpRoutine socketTcpRoutine = null; if (m_SocketTcpRoutines.TryGetValue(name ?? string.Empty, out socketTcpRoutine)) { socketTcpRoutine.SocketConnected -= OnSocketConnected; socketTcpRoutine.SocketClosed -= OnSocketClosed; socketTcpRoutine.SocketError -= OnSocketError; socketTcpRoutine.SocketCustomError -= OnSocketCustomError; socketTcpRoutine.Shutdown(); return(m_SocketTcpRoutines.Remove(name)); } return(false); }
/// <summary> /// 创建SocketTcp访问器 /// </summary> /// <param name="name">SocketTcp名称</param> /// <returns></returns> public SocketTcpRoutine CreateSocketTcpRoutine(string name) { if (HasSocketTcp(name)) { throw new Exception(TextUtil.Format("Already exist network channel '{0}'.", name ?? string.Empty)); } SocketTcpRoutine socketTcpRoutine = new SocketTcpRoutine(name); socketTcpRoutine.SocketConnected += OnSocketConnected; socketTcpRoutine.SocketClosed += OnSocketClosed; socketTcpRoutine.SocketError += OnSocketError; socketTcpRoutine.SocketCustomError += OnSocketCustomError; m_SocketTcpRoutines.Add(name, socketTcpRoutine); return(socketTcpRoutine); }
private void DrawSocketTcp(SocketTcpRoutine socketTcpRoutine) { EditorGUILayout.BeginVertical("box"); { EditorGUILayout.LabelField(socketTcpRoutine.Name, socketTcpRoutine.Connected ? "Connected" : "Disconnected"); EditorGUILayout.LabelField("Network Type", socketTcpRoutine.NetworkType.ToString()); EditorGUILayout.LabelField("Local Address", socketTcpRoutine.Connected ? TextUtil.Format("{0}:{1}", socketTcpRoutine.LocalIPAddress.ToString(), socketTcpRoutine.LocalPort.ToString()) : "Unavailable"); EditorGUILayout.LabelField("Remote Address", socketTcpRoutine.Connected ? TextUtil.Format("{0}:{1}", socketTcpRoutine.RemoteIPAddress.ToString(), socketTcpRoutine.RemotePort.ToString()) : "Unavailable"); EditorGUILayout.LabelField("Send Packet", TextUtil.Format("{0} / {1}", socketTcpRoutine.SendPacketCount.ToString(), socketTcpRoutine.SentPacketCount.ToString())); EditorGUILayout.LabelField("Receive Packet", TextUtil.Format("{0} / {1}", socketTcpRoutine.ReceivePacketCount.ToString(), socketTcpRoutine.ReceivedPacketCount.ToString())); EditorGUI.BeginDisabledGroup(!socketTcpRoutine.Connected); { if (GUILayout.Button("Disconnect")) { socketTcpRoutine.Close(); } } EditorGUI.EndDisabledGroup(); } EditorGUILayout.EndVertical(); EditorGUILayout.Separator(); }
// Use this for initialization void Start() { sc = new SocketTcpRoutine(); }
/// <summary> /// 填充网络连接关闭事件 /// </summary> /// <param name="socketTcpRoutine">socket</param> /// <returns>网络连接关闭事件</returns> public SocketClosedGameEvent Fill(SocketTcpRoutine socketTcpRoutine) { SocketTcpRoutine = socketTcpRoutine; return(this); }
private void OnSocketError(SocketTcpRoutine socketTcpRoutine, NetworkErrorCode errorCode, string errorMessage) { GameEntry.Event.CommonEvent.Dispatch(this, GameEntry.Pool.SpawnClassObject <SocketErrorGameEvent>().Fill(socketTcpRoutine, errorCode, errorMessage)); Debug.LogError(errorMessage); }
private void OnSocketCustomError(SocketTcpRoutine socketTcpRoutine, object customErrorData) { Debug.LogError(customErrorData); GameEntry.Event.CommonEvent.Dispatch(this, GameEntry.Pool.SpawnClassObject <SocketCustomErrorGameEvent>().Fill(socketTcpRoutine, customErrorData)); }
/// <summary> /// 填充网络连接成功事件 /// </summary> /// <param name="socketTcpRoutine">socket</param> /// <returns>网络连接成功事件</returns> public SocketConnectedGameEvent Fill(SocketTcpRoutine socketTcpRoutine) { Socket = socketTcpRoutine; return(this); }