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); } }
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); } } }
private void _SocketData(PackageIn pkg) { ProtocolManager.instance.ReadMessage(pkg.code, pkg); }
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); } }
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; }