예제 #1
0
        private void Send(int reqId, int resId, byte[] content, Action <int, ProtoPacket> callback)
        {
            //todo check network

            if (resId != 0)
            {
                //previous req is override, notify error
                if (mIdToOnceHandler.TryGetValue(resId, out var delegateObj))
                {
                    var error = ProtoPacket.CreateError(resId, (int)ErrorCode.req_override, string.Empty);
                    if (delegateObj != null)
                    {
                        delegateObj.DynamicInvoke(resId, error);
                    }
                    mIdToOnceHandler.Remove(resId);
                }

                if (callback != null)
                {
                    AddToHandler(resId, callback, mIdToOnceHandler);
                }

                var reqRecord = new ReqRecord();
                reqRecord.reqId   = reqId;
                reqRecord.resId   = resId;
                reqRecord.reqTime = Time.realtimeSinceStartup;
                mIdToRecord.Add(resId, reqRecord);
            }

            mChannel.Send(SendBuf.From(DCGameProtocol.GetIntBuf(reqId)), SendBuf.From(content));
        }
예제 #2
0
        public void SendAutoRes(IMessage req, Action <int, ProtoPacket> callback)
        {
            var id = DCGameProtocol.GetId(req);

            if (id != 0)
            {
                Send(id, id + 1, req.ToByteArray(), callback);
            }
        }
예제 #3
0
        public void Send(IMessage ms)
        {
            var id = DCGameProtocol.GetId(ms);

            if (id != 0)
            {
                Send(id, ms.ToByteArray());
            }
        }
예제 #4
0
        public void OnSend()
        {
            var req     = new PTestDemoClsReq();
            var reqId   = DCGameProtocol.GetId(req);
            var content = req.ToByteArray();

            mChannel.Send(SendBuf.From(DCGameProtocol.GetIntBuf(reqId)), SendBuf.From(content));
//            mChannel.Send(Encoding.UTF8.GetBytes(mSendStr));
        }
예제 #5
0
        public void Send(byte[] buf, int off, int len)
        {
            var lenBuf = DCGameProtocol.GetUshortBuf((ushort)len);

            mSendBuf.Write(lenBuf, 0, lenBuf.Length);

            mSendBuf.Write(buf, off, len);

            StartSend();
        }
예제 #6
0
        public static ProtoPacket FromRecvBuf(byte[] buf, int off, int len)
        {
            var packet = new ProtoPacket();

            packet.len     = DCGameProtocol.GetUshort(buf, off);
            packet.protoId = DCGameProtocol.GetInt(buf, off + 2);
            packet.buf     = buf;
            packet.offset  = off + 2 + 4;
            //len = (protoIdBytesLength + protoContentBytesLength)
            packet.protoLen = len - 4;
            return(packet);
        }
예제 #7
0
        private void OnRoleRes(int id, ProtoPacket protoPkt)
        {
            if (DCGameProtocol.CheckError(id, protoPkt) != ErrorCode.UNIVERSAL)
            {
                var errorRes = protoPkt.GetError();
                DCLog.LogEx(errorRes.No, errorRes.OpCode, errorRes.Msg);
                return;
            }

            var roleRes = (PRoleRes)protoPkt.ProtoObj;

            mRoleList.Clear();
            mRoleList.AddRange(roleRes.Infos);
        }
예제 #8
0
        public void Send(params SendBuf[] bufs)
        {
            if (bufs.Length == 0)
            {
                return;
            }

            var len = 0;

            foreach (var buf in bufs)
            {
                len += buf.len;
            }

            var lenBuf = DCGameProtocol.GetUshortBuf((ushort)len);

            mSendBuf.Write(lenBuf, 0, lenBuf.Length);
            foreach (var buf in bufs)
            {
                mSendBuf.Write(buf.buf, buf.off, buf.len);
            }

            StartSend();
        }
예제 #9
0
 private void Send(int id, byte[] content)
 {
     mChannel.Send(SendBuf.From(DCGameProtocol.GetIntBuf(id)), SendBuf.From(content));
 }
예제 #10
0
 public static SendBuf From(int val)
 {
     return(From(DCGameProtocol.GetIntBuf(val)));
 }