Beispiel #1
0
 public void EnqueueTest()
 {
     ThreadBridge.Enqueue(() =>
     {
         Console.WriteLine("EnqueueTest");
     });
 }
Beispiel #2
0
        /// <summary>
        /// 建構子
        /// </summary>
        /// <param name="socketPort"></param>
        /// <param name="isKeepNewConnectionWhenOverLimit">是否保留新連線</param>
        /// <param name="clientHeartBeatFrequency">客端心跳間隔</param>
        /// <param name="clientSameIPLimitCount">同 IP 的最大連線數</param>
        /// <param name="outputMessage">輸出訊息</param>
        public ProxyServer(int socketPort, bool isKeepNewConnectionWhenOverLimit, int clientHeartBeatFrequency, int clientSameIPLimitCount, Action <string> outputMessage)
        {
            fOutputMessage = outputMessage;
            fIsKeepNewConnectionWhenOverLimit = isKeepNewConnectionWhenOverLimit;
            fClientHeartBeatFrequency         = clientHeartBeatFrequency;
            fClientSameIPLimitCount           = clientSameIPLimitCount;

            // Listener worker
            fTcpListener = new TcpListener(IPAddress.Any, socketPort);
            fToken       = new CancellationTokenSource();

            //事件處理
            OnStatus           = new ThreadEvent <string>();
            OnData             = new ThreadEvent <string>();
            OnConnectionStatus = new ThreadEvent <ProxyClient>();

            // 平行結構
            fClientTmpQueue  = new ThreadBridge <ProxyClient>();
            fClientMoveQueue = new ThreadBridge <ProxyClient>();
            fCastingMessage  = new ThreadBridge <AckTask>();

            // connection pool
            fClientPool = new List <ProxyClient>();

            //connection worker
            fTaskListener = Task.Factory.StartNew(ListenerAsync, fToken.Token);

            // boradcastor
            fBroadcastor = Task.Factory.StartNew(BroadcastingAsync, fToken.Token);
        }
Beispiel #3
0
            public void thread(System.Func <object[], object> func, System.Func <object[], object> callback)
            {
                Thread t = new Thread(new ThreadStart(delegate { func(null);
                                                                 ThreadBridge.Invoke((delegate { callback(null); })); Thread.CurrentThread.Abort(); }));

                t.Start();
            }
Beispiel #4
0
        void PeerReceiveCallBack(IAsyncResult ar)
        {
            Socket _clientHander = (Socket)ar.AsyncState;

            int byteLength = 0;

            byte[] receivedData;

            byteLength = _clientHander.EndReceive(ar);

            receivedData = buffer;

            buffer = null;

            buffer = new byte[BufferSize];

            if (byteLength > 0)
            {
                _clientHander.BeginReceive(
                    buffer,
                    0,
                    BufferSize,
                    SocketFlags.None,
                    new AsyncCallback(PeerReceiveCallBack),
                    _clientHander
                    );
            }
            else
            {
                socketHandler.Close();

                if (OnDisconnected != null)
                {
                    OnDisconnected(null);
                }

                return;
            }

            try
            {
                if (ResponseCallBack != null)
                {
                    ThreadBridge.Invoke(() => { ResponseCallBack(token, receivedData); });
                }
            }
            catch (Exception e)
            {
                Logger.LogError(e.Message + ":::" + e.StackTrace);
            }
        }
Beispiel #5
0
        public void DequeueTest1()
        {
            ThreadBridge.Enqueue(() =>
            {
                Console.WriteLine("EnqueueTest1");
            });

            ThreadBridge.Enqueue(() =>
            {
                Console.WriteLine("EnqueueTest2");
            });

            //Dequeue all.
            //ThreadBridge.Dequeue();

            //Dequeue one.
            ThreadBridge.Dequeue(1);
        }
Beispiel #6
0
    public static void Invoke(System.Action _delegate)
    {
        if (_instance == null)
        {
            var obj = FindObjectOfType <ThreadBridge>();

            if (obj == null)
            {
                var _obj = new GameObject("Invoker", typeof(ThreadBridge));
                _instance = _obj.GetComponent <ThreadBridge>();
            }
            else
            {
                _instance = obj;
            }
        }

        _instance.delegates.Add(_delegate);
    }
Beispiel #7
0
        void BeginResponseCallBack(IAsyncResult ar)
        {
            UdpPeer peer = (UdpPeer)ar.AsyncState;

            int rev = peer.serverSocket.EndReceiveFrom(ar, ref peer.remoteEndPoint);

            if (rev > 0)
            {
                if (ResponseCallback != null)
                {
                    ThreadBridge.Invoke(() => { ResponseCallback(peer.remoteEndPoint, peer.buffer); });
                }

                peer.ResetBuffer();

                socketHandler.BeginReceiveFrom
                    (peer.buffer, 0, bufferSize, SocketFlags.None,
                    ref peer.remoteEndPoint, new AsyncCallback(BeginResponseCallBack), peer);
            }
        }
Beispiel #8
0
        void ReceivedAsynCallBack(IAsyncResult ar)
        {
            Socket socketHandler = (Socket)ar.AsyncState;

            int byteLength = socketHandler.EndReceive(ar);

            if (byteLength > 0)
            {
                if (OnReceived != null)
                {
                    ThreadBridge.Invoke(() => { OnReceived(buffer); });
                }
            }

            socketHandler.BeginReceive(
                buffer,
                0,
                BufferSize,
                SocketFlags.None,
                new AsyncCallback(ReceivedAsynCallBack),
                socketHandler
                );
        }
Beispiel #9
0
        void AcceptCallBack(IAsyncResult ar)
        {
            Socket ListenerHandler = (Socket)ar.AsyncState;

            Socket ClientHandler = ListenerHandler.EndAccept(ar);

            ListenerHandler.BeginAccept(new AsyncCallback(AcceptCallBack), ListenerHandler);

            string token = Token.GenToken(randomFactor.Next(2, 32));

            Token[token] = new TcpConnectedPeer(token, ClientHandler, OnClientReceived, this);

            try
            {
                if (OnClientConnected != null)
                {
                    ThreadBridge.Invoke(() => { OnClientConnected(Token[token].token); });
                }
            }
            catch (Exception e)
            {
                Logger.LogError(e.Message + "Tcp Server AcceptCallBack:::::::\n" + e.StackTrace);
            }
        }
Beispiel #10
0
 public void DequeueTest()
 {
     EnqueueTest();
     ThreadBridge.Dequeue();
 }
Beispiel #11
0
 void Awake()
 {
     _instance = this;
 }
Beispiel #12
0
 public static void MainCall(Action action)
 {
     ThreadBridge.Invoke(action);
 }