예제 #1
0
        public void Send(string channelName, int ContractID, Dictionary <string, string> sendParams, Action <object> callback = null, bool loadMask = true)
        {
            var channel = this.Channels[channelName];
            var body    = CreateBody(sendParams);

            var signStr = channel.Pipeline.ClientID + channel.Pipeline.SessionID + ContractID + body.Length.ToString();

            var sign = GetCrypt(channel.Options.key).EncryptECB(signStr);

            var message = MessageFactory.Create(channel.Pipeline.ClientID, channel.Pipeline.SessionID, ContractID, sign, body) as RequestMessagePacket;

            if (callback != null)
            {
                var action = ActionFactory.CreateAction.Invoke(channelName, ContractID);
                action.Params   = sendParams;
                action.Callback = callback;
                this.SendActions.Add(message.MessageID, action);
            }

            if (this.SendCallBack != null)
            {
                //当前不一定是主线程,,得添加到loom中
                //loom是在update内执行(不是立即)。。确保这里是顺序执行
                Loom.QueueOnMainThread(() =>
                {
                    SendCallBack.Invoke(channel.Pipeline, message, loadMask);
                    channel.Pipeline.WriteAndFlushAsync(message);
                });
            }
            else
            {
                channel.Pipeline.WriteAndFlushAsync(message);
            }
        }
예제 #2
0
파일: DelaySend.cs 프로젝트: sczhaoyu/mh
 /// <summary>
 /// 延迟发送
 /// </summary>
 /// <param name="r">是否随机延迟</param>
 /// <param name="s">随机开始</param>
 /// <param name="e">随机结束</param>
 /// <param name="c">命令</param>
 public DelaySend(int hwnd, bool r, int s, int e, string c, SendCallBack prevFunc, SendCallBack lastFunc)
 {
     this.random   = r;
     this.s        = s;
     this.e        = e;
     this.cmd      = c;
     this.hwnd     = hwnd;
     this.prevFunc = prevFunc;
     this.lastFunc = lastFunc;
 }
예제 #3
0
 public ReliableRequest(int command, float time, byte[] data, EndPoint e, SendCallBack sendCb, CallBack cb)
 {
     this.command = command;
     this.sendCb  = sendCb;
     this.cb      = cb;
     this.time    = time;
     oldTime      = DateTime.Now.Millisecond;
     this.data    = data;
     this.e       = e;
 }
예제 #4
0
        /// <summary>
        /// 向客户端发送数据
        /// </summary>
        public void SendData(object msg)
        {
            var data = this.Encoding.GetBytes((string)msg);

            try
            {
                _client.Send(data);
                SendCallBack?.Invoke(TheEndPoint);
            }
            catch { }
        }
예제 #5
0
 public SQEle(byte[] data, SendCallBack callBack)
 {
     this.data     = data;
     this.callBack = callBack;
 }