// @SuppressWarnings("null")
    public void run() {

      try {

        try {
          BufferedReader in = new BufferedReader(new InputStreamReader(ss.getInputStream()));

          while ((line = in.readLine()) != null) {
            Log.d("In Client: Path " + cnt, line);

            // got a new path
            stouter = new StringTokenizer(line, "|");
            flag = 1;
            while (stouter.hasMoreTokens()) {
              // getting x,ys for each path
              stinner = new StringTokenizer(stouter.nextToken(), ",");
              if (stinner.hasMoreTokens()) {
                if (flag == 1) // this is the moveTo X,Y
                {
                  flag = 0;
                  String x, y;
                  x = stinner.nextToken();
                  y = stinner.nextToken();
                  p.moveTo(Float.parseFloat(x), Float.parseFloat(y));
                  p.lineTo(Float.parseFloat(x), Float.parseFloat(y));
                } else { // lineTo
                  String x, y;
                  x = stinner.nextToken();
                  y = stinner.nextToken();
                  p.lineTo(Float.parseFloat(x), Float.parseFloat(y));
                }
              }
            }
            // p.close();
            synchronized (_graphics) {
              if (!_graphics.contains(p)) _graphics.add(p);
              d.postInvalidate();
            }

            cnt++;
          }

          in.close();
        } catch (Exception e) {
          // e.printStackTrace();
          Log.d("S-C ERROR", "END OF INPUT FROM SERVER");
          /*handler.post(new Runnable(){
          @Override
          public void run(){
          	d.addthepath((SArrayList)o);
          	//_graphics.add((SPath)o);
          }
          });*/

        }
        // }
        ss.close();
      } catch (Exception e) {
        e.printStackTrace();
        try {
          ss.close();
        } catch (IOException e1) {
          // TODO Auto-generated catch block
          e1.printStackTrace();
        }
      }
    }
  private static SNode parsePathNode(Elem root) throws IOException {
    SPath path = new SPath();
    String d = root.attr("d");

    PushbackReader read = new PushbackReader(new StringReader(d));
    int count = 0;
    double x = 0;
    double y = 0;
    SPath.PathPoint prev = null;
    boolean go = true;
    while (go) {
      count++;
      char ch = (char) read.read();
      if (ch == -1) break;
      double x1, x2, y1, y2;
      u.p("ch = " + ch);
      switch (ch) {
          // absolute move
        case 'M':
          x = readDouble(read);
          y = readDouble(read);
          prev = path.moveTo(x, y);
          continue;
          // relative vertical lineto
        case 'v':
          y += readDouble(read);
          prev = path.lineTo(x, y);
          continue;
          // absolute vertical lineto
        case 'V':
          y = readDouble(read);
          prev = path.lineTo(x, y);
          continue;
          // relative horiz lineto
        case 'h':
          x += readDouble(read);
          prev = path.lineTo(x, y);
          continue;
        case 'H':
          x = readDouble(read);
          prev = path.lineTo(x, y);
          continue;
          // relative lineto
        case 'l':
          x += readDouble(read);
          y += readDouble(read);
          prev = path.lineTo(x, y);
          continue;
        case 'L':
          x = readDouble(read);
          y = readDouble(read);
          prev = path.lineTo(x, y);
          continue;
          // relative cubic curve
        case 'c':
          x1 = x + readDouble(read);
          y1 = y + readDouble(read);
          x2 = x + readDouble(read);
          y2 = y + readDouble(read);
          x += readDouble(read);
          y += readDouble(read);
          prev = path.curveTo(prev, x1, y1, x2, y2, x, y);
          continue;
          // relative shorthand curve
        case 's':
          x2 = x + readDouble(read);
          y2 = y + readDouble(read);
          x += readDouble(read);
          y += readDouble(read);
          double dx = prev.x - prev.cx1;
          double dy = prev.y - prev.cy1;
          double rx = prev.x + dx;
          double ry = prev.y + dy;
          prev = path.curveTo(prev, rx, ry, x2, y2, x, y);
          continue;
          // absolute cubic curve
        case 'C':
          x1 = readDouble(read);
          y1 = readDouble(read);
          x2 = readDouble(read);
          y2 = readDouble(read);
          x = readDouble(read);
          y = readDouble(read);
          prev = path.curveTo(prev, x1, y1, x2, y2, x, y);
          continue;
        case 'z':
          path.close();
          break;
        case ' ':
          continue;
        case '\n':
          continue;
          // end of string
        case (char) -1:
          go = false;
          break;
        default:
          u.p("unrecognized character! " + ch + " " + ((int) ch));
          go = false;
          break;
      }
    }

    parseFill(path, root);
    parseStroke(path, root);
    return path;
  }