示例#1
0
 private void _OnResponse(HTTP.Response response)
 {
     if (response != null && response.status == 200)
     {
         PackageIn pkg = new PackageIn();
         pkg.Load(response.Bytes, 0, response.Bytes.Length);
         ProtocolManager.instance.ReadMessage(pkg.code, pkg);
     }
     else
     {
         EventManager.Dispatch(this, HTTP_ERROR);
     }
 }
示例#2
0
		public virtual void ReadPackage(PackageIn pkg)
		{
            if (pkg == null)
            {
                throw new Exception("Error: Package is null when ReadPackage.");
            }
            else
            {
                if (_resultType != null)
                {
                    if (pkg.errCode == 0 && pkg.HasBody())
                    {
                        object result = PackageConverter.PackageToObject(pkg, _resultType);
                        ProtocolManager.instance.SendNotifyListener(code, pkg.errCode, result);
                    }
                    else
                    {
                        ProtocolManager.instance.SendNotifyListener(code, pkg.errCode, null);
                    }
                }
                else
                {
                    ProtocolManager.instance.SendNotifyListener(code, pkg.errCode);
                }
            }
		}
示例#3
0
 private void _SocketData(PackageIn pkg)
 {
     ProtocolManager.instance.ReadMessage(pkg.code, pkg);
 }
示例#4
0
		private void HandlePackage(PackageIn pkg)
		{
			try
			{
                pkg.position = PackageIn.HEADER_SIZE;
                EventManager.instance.DispatchEvent(this, SocketEvent.SOCKET_DATA, pkg);
			}
			catch(Exception error) 
			{
                Log.Debug("handlePackage: " + error.StackTrace);
			}
		}
示例#5
0
		private void ReadPackage()
		{
			int dataAvailable = _writeOffset - _readOffset;
			do 
			{
				int len = 0;
                Array.Copy(_readBuffer, _readOffset, _pkgLength, 0, 4);
                if (BitConverter.IsLittleEndian)
                {
                    len = BitConverter.ToInt32(EdianConvert.GetConvertEdian(_pkgLength), 0);
                }
                else
                {
                    len = BitConverter.ToInt32(_pkgLength, 0);
                }
                
				dataAvailable = _writeOffset - _readOffset;
				if (dataAvailable < len || len == 0)
                {
					break;
				}

                PackageIn buff = new PackageIn(); 
				buff.Load(_readBuffer, _readOffset, len);
				_readOffset += len;
                dataAvailable = _writeOffset - _readOffset;
                HandlePackage(buff); 
			} while(dataAvailable >= PackageIn.HEADER_SIZE);
            
			if (dataAvailable > 0)
			{
                lock (_readBuffer)
                {
                    Array.Copy(_readBuffer, _readOffset, _readBuffer, 0, dataAvailable);
                }
			}
			_readOffset = 0;
			_writeOffset = dataAvailable;
		}