Exemple #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));
        }
        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));
        }
Exemple #3
0
        internal bool PostSend()
        {
            bool         haveDataSend = false;
            IAsyncResult ar           = null;
            SocketError  socketError  = SocketError.SocketError;
            HandlerParam handlerParam = null;

            try
            {
                if (SUCCESS(IsClosed))
                {
                    goto Exit1;
                }
                if (SUCCESS(IsSending))
                {
                    goto Exit1;
                }

                if (SendBuf.GetOnceReadableLen() > 0)
                {
                    IsSending    = true;
                    haveDataSend = true;

                    handlerParam = new HandlerParam(EHandlerType.Socker, this);
                    if (LOG_ERROR(handlerParam != null))
                    {
                        goto Exit0;
                    }

                    ar = Sock.BeginSend(SendBuf.BufBytes, SendBuf.ReadInx, SendBuf.GetOnceReadableLen(), SocketFlags.None, out socketError,
                                        LP.NetModule.Reactor.OnSend, handlerParam);
                    if (socketError != SocketError.Success)
                    {
                        Close(ESockerCloseType.PostSendFail, 1, true);
                        goto Exit0;
                    }
                    if (LOG_ERROR(ar != null))
                    {
                        goto Exit0;
                    }
                }
            }
            catch (Exception e)
            {
                LPMiniDump.GenerateNormalDump(e);
            }

Exit1:
Exit0:
            return(haveDataSend);
        }
Exemple #4
0
        public bool Send(string msg)
        {
            bool result   = false;
            bool overflow = false;

            byte[] msgBytes = null;

            //检测是否sock是否连接中
            if (SUCCESS(IsClosed))
            {
                goto Exit1;
            }

            msgBytes = Encoding.UTF8.GetBytes(msg.ToCharArray());
            if (LOG_ERROR(msgBytes != null))
            {
                goto Exit0;
            }

            if (SendBuf.GetTotalWritableLen() < msgBytes.Length)
            {
                overflow = true;
            }
            else
            {
                result = SendBuf.Write(msgBytes, 0, msgBytes.Length);
                if (LOG_ERROR(result))
                {
                    goto Exit0;
                }
            }

            if (overflow)
            {
                Close(ESockerCloseType.SendBufOverflow, 1, false);
                if (LOG_ERROR(false))
                {
                    goto Exit0;
                }
            }

Exit1:
            return(true);

Exit0:
            return(false);
        }
Exemple #5
0
        public bool Send(byte[] data, int startIndex, int length)
        {
            bool result   = false;
            bool overflow = false;

            //检测是否sock是否连接中
            if (SUCCESS(IsClosed))
            {
                goto Exit1;
            }

            if (SendBuf.GetTotalWritableLen() < length)
            {
                overflow = true;
            }
            else
            {
                result = SendBuf.Write(data, startIndex, length);
                if (LOG_ERROR(result))
                {
                    goto Exit0;
                }
            }

            if (overflow)
            {
                Close(ESockerCloseType.SendBufOverflow, 1, false);
                if (LOG_ERROR(false))
                {
                    goto Exit0;
                }
            }

Exit1:
            return(true);

Exit0:
            return(false);
        }