⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nativefile.java

📁 RESIN 3.2 最新源码
💻 JAVA
字号:
/* * Copyright (c) 1998-2006 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the *   Free SoftwareFoundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */package com.caucho.es;import com.caucho.vfs.WriteStream;import java.io.IOException;/** * JavaScript object */class NativeFile extends Native {  static ESId IN = ESId.intern("in");  static ESId OUT = ESId.intern("out");  static final int WRITE = 2;  static final int WRITELN = 3;  static final int FLUSH = 4;  static final int CLOSE = 5;  private NativeFile(String name, int n, int len)  {    super(name, len);    this.n = n;  }  static void create(Global resin)  {    put(resin, "write", WRITE, 0, DONT_ENUM);    put(resin, "writeln", WRITELN, 0, DONT_ENUM);    put(resin, "flush", FLUSH, 0, DONT_ENUM);    put(resin, "close", CLOSE, 0, DONT_ENUM);  }    private static void put(Global resin, String name, int n, int len, 			  int flags)  {    ESId id = ESId.intern(name);    resin.addProperty(id, new NativeFile(name, n, len));  }  public ESBase call(Call eval, int length) throws Throwable  {    ESBase evalThis = eval.getArg(-1);    WriteStream stream = null;    try {      stream = (WriteStream) evalThis.toJavaObject();    } catch (Exception e) {    }    if (stream == null) {      ESBase out = evalThis.hasProperty(OUT);      if (out != null) {        eval.setThis(out);        return out.call(eval, length, id);      }    }        switch (n) {    case WRITE:      return write(eval, length);    case WRITELN:      return writeln(eval, length);    case FLUSH:      return flush(eval, length);    case CLOSE:      return close(eval, length);    default:      throw new ESException("Unknown file function");    }  }  private static WriteStream getWriteStream(Call eval) throws Throwable  {    ESBase evalThis = eval.getArg(-1);    WriteStream stream = null;    try {      stream = (WriteStream) evalThis.toJavaObject();    } catch (Exception e) {    }    if (stream != null)      return stream;    ESBase obj = evalThis.hasProperty(OUT);    try {      stream = (WriteStream) obj.toJavaObject();    } catch (Exception e) {    }    obj = Global.getGlobalProto().getGlobal().hasProperty(OUT);    try {      stream = (WriteStream) obj.toJavaObject();    } catch (Exception e) {    }    if (stream == null)      throw new ESException("expected file as `this' or as value of `" + OUT + "'");    return stream;  }  static public ESBase write(Call eval, int length) throws Throwable  {    WriteStream stream = getWriteStream(eval);    try {      for (int i = 0; i < length; i++)	stream.print(eval.getArg(i).toString());    } catch (IOException e) {      return ESBoolean.FALSE;    }    return eval.getArg(-1);  }  static public ESBase writeln(Call eval, int length) throws Throwable  {    WriteStream stream = getWriteStream(eval);    try {      for (int i = 0; i < length; i++)	stream.print(eval.getArg(i).toString());      stream.println();    } catch (IOException e) {      return ESBoolean.FALSE;    }    return eval.getArg(-1);  }  static public ESBase flush(Call eval, int length) throws Throwable  {    WriteStream stream = getWriteStream(eval);    try {      stream.flush();    } catch (IOException e) {      return ESBoolean.FALSE;    }    return eval.getArg(-1);  }  static public ESBase close(Call eval, int length) throws Throwable  {    WriteStream stream = getWriteStream(eval);    try {      stream.close();    } catch (IOException e) {      return ESBoolean.FALSE;    }    return eval.getArg(-1);  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -