Exemplo n.º 1
0
        /// <summary>
        /// 收到消息
        /// </summary>
        /// <param name="br">流</param>
        /// <param name="socketID">套接字ID</param>
        /// <param name="localSID">本地套接字ID</param>
        /// <param name="len">长度</param>
        public virtual void onCallBack(FCBinary br, int socketID, int localSID, int len)
        {
            int headSize     = sizeof(int) * 4 + sizeof(short) * 3 + sizeof(byte) * 2;
            int functionID   = br.readShort();
            int sessionID    = br.readInt();
            int requestID    = br.readInt();
            int state        = br.readByte();
            int compressType = br.readByte();
            int bodyLength   = br.readInt();

            byte[] body = new byte[len - headSize];
            br.readBytes(body);
            if (compressType == COMPRESSTYPE_GZIP)
            {
                using (MemoryStream dms = new MemoryStream()) {
                    using (MemoryStream cms = new MemoryStream(body)) {
                        using (GZipStream gzip = new GZipStream(cms, CompressionMode.Decompress)) {
                            byte[] buffer = new byte[1024];
                            int    size   = 0;
                            while ((size = gzip.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                dms.Write(buffer, 0, size);
                            }
                            body = dms.ToArray();
                        }
                    }
                }
            }
            FCMessage message = new FCMessage(GroupID, ServiceID, functionID, sessionID, requestID, socketID, state, compressType, bodyLength, body);

            onReceive(message);
            onWaitMessageHandle(message);
            message.m_body = null;
            body           = null;
        }
Exemplo n.º 2
0
        /// <summary>
        /// 回调方法
        /// </summary>
        public void callBack(FCMessage message)
        {
            int callBackSize = m_callBacks.Count;

            for (int i = 0; i < callBackSize; i++)
            {
                m_callBacks.get(i)(message);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 异步发送数据
        /// </summary>
        /// <param name="obj"></param>
        public void asynSend(Object obj)
        {
            FCMessage message = obj as FCMessage;

            if (message == null)
            {
                return;
            }
            sendRequest(message);
        }
Exemplo n.º 4
0
 /// <summary>
 /// 等待消息的处理
 /// </summary>
 /// <param name="message">消息</param>
 public virtual void onWaitMessageHandle(FCMessage message)
 {
     if (m_waitMessages.Count > 0)
     {
         lock (m_waitMessages) {
             if (m_waitMessages.containsKey(message.m_requestID))
             {
                 FCMessage waitMessage = m_waitMessages.get(message.m_requestID);
                 waitMessage.copy(message);
             }
         }
     }
 }
Exemplo n.º 5
0
 /// <summary>
 /// 复制数据
 /// </summary>
 /// <param name="message">消息</param>
 public void copy(FCMessage message)
 {
     m_groupID      = message.m_groupID;
     m_serviceID    = message.m_serviceID;
     m_functionID   = message.m_functionID;
     m_sessionID    = message.m_sessionID;
     m_requestID    = message.m_requestID;
     m_socketID     = message.m_socketID;
     m_state        = message.m_state;
     m_compressType = message.m_compressType;
     m_bodyLength   = message.m_bodyLength;
     m_body         = message.m_body;
 }
Exemplo n.º 6
0
 /// <summary>
 /// 发送POST数据
 /// </summary>
 /// <param name="message">消息</param>
 /// <returns>返回消息</returns>
 public override int send(FCMessage message)
 {
     if (!m_isSyncSend)
     {
         Thread thread = new Thread(asynSend);
         thread.Start(message);
         return(1);
     }
     else
     {
         return(sendRequest(message));
     }
 }
Exemplo n.º 7
0
        /// <summary>
        /// 发送到监听者
        /// </summary>
        /// <param name="message">消息</param>
        public virtual void sendToListener(FCMessage message)
        {
            FCMessageListener listener = null;

            lock (m_listeners) {
                if (m_listeners.containsKey(message.m_requestID))
                {
                    listener = m_listeners.get(message.m_requestID);
                }
            }
            if (listener != null)
            {
                listener.callBack(message);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="message">消息</param>
        public override int send(FCMessage message)
        {
            FCBinary bw = new FCBinary();

            byte[] body          = message.m_body;
            int    bodyLength    = message.m_bodyLength;
            int    uncBodyLength = bodyLength;

            lock (m_compressTypes) {
                if (m_compressTypes.ContainsKey(message.m_socketID))
                {
                    message.m_compressType = m_compressTypes.get(message.m_socketID);
                }
            }
            if (message.m_compressType == COMPRESSTYPE_GZIP)
            {
                using (MemoryStream cms = new MemoryStream()) {
                    using (GZipStream gzip = new GZipStream(cms, CompressionMode.Compress)) {
                        gzip.Write(body, 0, body.Length);
                    }
                    body       = cms.ToArray();
                    bodyLength = body.Length;
                }
            }
            int len = sizeof(int) * 4 + bodyLength + sizeof(short) * 3 + sizeof(byte) * 2;

            bw.writeInt(len);
            bw.writeShort((short)message.m_groupID);
            bw.writeShort((short)message.m_serviceID);
            bw.writeShort((short)message.m_functionID);
            bw.writeInt(message.m_sessionID);
            bw.writeInt(message.m_requestID);
            bw.writeByte((byte)message.m_state);
            bw.writeByte((byte)message.m_compressType);
            bw.writeInt(uncBodyLength);
            bw.writeBytes(body);
            byte[] bytes = bw.getBytes();
            lock (FCHttpMonitor.MainMonitor.m_httpDatas) {
                FCHttpMonitor.MainMonitor.m_httpDatas.get(message.m_socketID).m_resBytes = bytes;
            }
            int ret = bytes.Length;

            UpFlow += ret;
            bw.close();
            onClientClose(message.m_socketID, 0);
            return(ret);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="message">消息</param>
        public virtual int send(FCMessage message)
        {
            FCBinary bw = new FCBinary();

            byte[] body          = message.m_body;
            int    bodyLength    = message.m_bodyLength;
            int    uncBodyLength = bodyLength;

            if (message.m_compressType == COMPRESSTYPE_GZIP)
            {
                using (MemoryStream cms = new MemoryStream()) {
                    using (GZipStream gzip = new GZipStream(cms, CompressionMode.Compress)) {
                        gzip.Write(body, 0, body.Length);
                    }
                    body       = cms.ToArray();
                    bodyLength = body.Length;
                }
            }
            int len = sizeof(int) * 4 + bodyLength + sizeof(short) * 3 + sizeof(byte) * 2;

            bw.writeInt(len);
            bw.writeShort((short)message.m_groupID);
            bw.writeShort((short)message.m_serviceID);
            bw.writeShort((short)message.m_functionID);
            bw.writeInt(message.m_sessionID);
            bw.writeInt(message.m_requestID);
            bw.writeByte((byte)message.m_state);
            bw.writeByte((byte)message.m_compressType);
            bw.writeInt(uncBodyLength);
            bw.writeBytes(body);
            byte[] bytes  = bw.getBytes();
            int    length = bytes.Length;
            int    ret    = FCClientSockets.send(message.m_socketID, bytes, length);

            m_upFlow += ret;
            bw.close();
            return(ret);
        }
Exemplo n.º 10
0
 /// <summary>
 /// 注册等待
 /// </summary>
 /// <param name="requestID">请求ID</param>
 /// <param name="message">消息</param>
 public virtual void registerWait(int requestID, FCMessage message)
 {
     lock (m_waitMessages) {
         m_waitMessages.put(requestID, message);
     }
 }
Exemplo n.º 11
0
 /// <summary>
 /// 接收数据
 /// </summary>
 /// <param name="message">消息</param>
 public virtual void onReceive(FCMessage message)
 {
     lock (m_compressTypes) {
         m_compressTypes.put(message.m_socketID, message.m_compressType);
     }
 }
Exemplo n.º 12
0
 /// <summary>
 /// 接收数据
 /// </summary>
 /// <param name="message">消息</param>
 public override void onReceive(FCMessage message)
 {
     base.onReceive(message);
     sendToListener(message);
 }
Exemplo n.º 13
0
        /// <summary>
        /// 发送POST数据
        /// </summary>
        /// <param name="message">消息</param>
        /// <returns>返回消息</returns>
        public int sendRequest(FCMessage message)
        {
            FCBinary bw = new FCBinary();

            byte[] body          = message.m_body;
            int    bodyLength    = message.m_bodyLength;
            int    uncBodyLength = bodyLength;

            if (message.m_compressType == COMPRESSTYPE_GZIP)
            {
                using (MemoryStream cms = new MemoryStream())
                {
                    using (GZipStream gzip = new GZipStream(cms, CompressionMode.Compress))
                    {
                        gzip.Write(body, 0, body.Length);
                    }
                    body       = cms.ToArray();
                    bodyLength = body.Length;
                }
            }
            int len = sizeof(int) * 4 + bodyLength + sizeof(short) * 3 + sizeof(byte) * 2;

            bw.writeInt(len);
            bw.writeShort((short)message.m_groupID);
            bw.writeShort((short)message.m_serviceID);
            bw.writeShort((short)message.m_functionID);
            bw.writeInt(message.m_sessionID);
            bw.writeInt(message.m_requestID);
            bw.writeByte((byte)message.m_state);
            bw.writeByte((byte)message.m_compressType);
            bw.writeInt(uncBodyLength);
            bw.writeBytes(body);
            byte[]         bytes  = bw.getBytes();
            int            length = bytes.Length;
            HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(m_url);

            webReq.Method        = "POST";
            webReq.ContentType   = "application/x-www-form-urlencoded";
            webReq.ContentLength = bytes.Length;
            if (bytes != null)
            {
                Stream writer = webReq.GetRequestStream();
                writer.Write(bytes, 0, bytes.Length);
                writer.Close();
            }
            HttpWebResponse response      = (HttpWebResponse)webReq.GetResponse();
            Stream          reader        = response.GetResponseStream();
            long            contentLength = response.ContentLength;

            byte[] dataArray = new byte[contentLength];
            for (int i = 0; i < contentLength; i++)
            {
                dataArray[i] = (byte)reader.ReadByte();
            }
            response.Close();
            reader.Dispose();
            bw.close();
            int ret = dataArray.Length;

            UpFlow += ret;
            FCClientService.callBack(message.m_socketID, 0, dataArray, ret);
            return(ret);
        }
Exemplo n.º 14
0
 /// <summary>
 /// 接收数据
 /// </summary>
 /// <param name="message">消息</param>
 public virtual void onReceive(FCMessage message)
 {
 }