public BaseServer() { isConnect = false; tcpReciver = new PackageReciver(this); udpReciver = new PackageReciver(this); tcpSocket.onCloseSocket += new TcpSocketCloseSocketDelegate(TcpOnCloseSocket); tcpSocket.onConnect += new TcpSocketConnectDelegate(TcpOnConnect); tcpSocket.onError += new TcpSocketErrorDelegate(TcpOnError); tcpSocket.onListen += new TcpSocketListenDelegate(TcpOnListen); tcpSocket.onReceive += new TcpSocketReceiveDelegate(TcpOnReceive); tcpSocket.onSend += new TcpSocketSendDelegate(TcpOnSend); udpSocket.onBind += new UdpSocketBindDelegate(UdpOnBind); udpSocket.onError += new UdpSocketErrorDelegate(UdpOnError); udpSocket.onListen += new UdpSocketListenDelegate(UdpOnListen); udpSocket.onReceive += new UdpSocketReceiveDelegate(UdpOnReceive); currentChannel = new List <int>(); tcpReciverTask = CoroutineTaskManager.Instance.LoopTodoByWhile(tcpReciver.HandlePackageInQueue, Time.deltaTime, () => { return(isConnect); }); udpReciverTask = CoroutineTaskManager.Instance.LoopTodoByWhile(udpReciver.HandlePackageInQueue, Time.deltaTime, () => { return(isConnect); }); EventDispatcher.AddEventListener <string>(ServerEvent.GetChannelId, GetChannelId, this); }
public sealed override bool DoBehavior() { bool flag = CanDoBehavior(); if (flag) { root.currentRunningNode = this; runState = RunStatus.Running; //加入行为队列,如果完成工作就进入下一个节点 actionQueue.AddAction((act) => { task = new CoroutineTaskManager.CoroutineTask(root.GetHashCode() + GetType().Name, DoActionWithChangeState(), (comp) => { if (comp) { if (act != null) { act(); } else { root.Tick(); } } }); CoroutineTaskManager.Instance.AddTask(task); }); return(true); } else { return(false); } }
/// <summary> /// 请求异步事件 /// </summary> /// <param name="requestType"></param> /// <param name="requestArgs"></param> /// <param name="responseType"></param> /// <param name="handler"></param> /// <param name="timeOut"></param> public static void Request(string requestType, ArrayList requestArgs, string responseType, Action <ArrayList> handler, float timeOut = 2) { string responseString = responseType + "Request"; //处理返回动作 Action <ArrayList> responseHandler = null; CoroutineTaskManager.CoroutineTask task = null; responseHandler = (array) => { handler(array); EventDispatcher.RemoveEventListener <ArrayList>(responseString, responseHandler); task.Stop(); }; //监听返回行为 EventDispatcher.AddEventListener <ArrayList>(responseString, responseHandler); //出发请求事件 EventDispatcher.TriggerEvent <ArrayList>(requestType, requestArgs); //处理超时情况 task = CoroutineTaskManager.Instance.WaitSecondTodo(() => { Debug.logger.LogError("Request", requestType + "request Timeout!"); EventDispatcher.RemoveEventListener <ArrayList>(responseString, responseHandler); }, timeOut); }