Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        /// <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);
        }