Пример #1
0
    public static void Dispatch()
    {
        package pkg = new package();

        lock (queueLock)
        {
            if (recvQueue.Count == 0)
            {
                return;
            }

            Queue <byte[]> tmpQueue = recvQueue;
            recvQueue     = dispatchQueue;
            dispatchQueue = tmpQueue;
        }

        if (dispatchQueue.Count > 20)
        {
            Debug.Log("dispatchQueue.Count: " + dispatchQueue.Count);
        }

        while (dispatchQueue.Count > 0)
        {
            byte[] data   = recvPack.unpack(dispatchQueue.Dequeue());
            int    offset = pkg.init(data);

            int  tag     = (int)pkg.type;
            long session = (long)pkg.session;

            if (pkg.HasType)
            {
                RpcReqHandler rpcReqHandler = NetReceiver.GetHandler(tag);
                if (rpcReqHandler != null)
                {
                    SprotoTypeBase rpcRsp = rpcReqHandler(protocol.GenRequest(tag, data, offset));
                    if (pkg.HasSession)
                    {
                        Send(rpcRsp, session, tag);
                    }
                }
            }
            else
            {
                RpcRspHandler rpcRspHandler = NetSender.GetHandler(session);
                if (rpcRspHandler != null)
                {
                    ProtocolFunctionDictionary.typeFunc GenResponse;
                    sessionDict.TryGetValue(session, out GenResponse);
                    rpcRspHandler(GenResponse(data, offset));
                }
            }
        }
    }
Пример #2
0
    public static void Dispatch()
    {
        //Debug.Log("dis");
        try
        {
            package pkg = new package();

            if (recvQueue.Count > 20)
            {
                Debug.Log("recvQueue.Count: " + recvQueue.Count);
            }

            while (recvQueue.Count > 0)
            {
                //Debug.Log("dis");
                byte[] data   = recvPack.unpack(recvQueue.Dequeue());
                int    offset = pkg.init(data);

                int  tag     = (int)pkg.type;
                long session = (long)pkg.session;

                if (pkg.HasType)
                {
                    //Debug.Log("type");
                    try
                    {
                        RpcReqHandler rpcReqHandler = NetReceiver.GetHandler(tag);
                        if (rpcReqHandler != null)
                        {
                            SprotoTypeBase rpcRsp = rpcReqHandler(protocol.GenRequest(tag, data, offset));
                            if (pkg.HasSession)
                            {
                                Send(rpcRsp, session, tag);
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.Log("NetReceiver exception: " + e.Message + tag + session + offset);
                        throw;
                    }
                }
                else
                {
                    //Debug.Log("no type");
                    try
                    {
                        RpcRspHandler rpcRspHandler = NetSender.GetHandler(session);
                        if (rpcRspHandler != null)
                        {
                            ProtocolFunctionDictionary.typeFunc GenResponse;
                            sessionDict.TryGetValue(session, out GenResponse);
                            rpcRspHandler(GenResponse(data, offset));
                        }
                    }
                    catch (Exception e)
                    {
                        Debug.Log("NetReceiver exception: " + e.Message + tag + session + offset);
                        throw;
                    }
                }
            }
        }
        catch (Exception e)
        {
            Debug.Log("Dispatch exception: " + e.Message);
            throw;
        }
    }