2006年9月12日

自己在公司网站开发总用DWR开发的一个简单聊天
本人也是在网站开发地图时有到了这个技术,刚学习DWR半个月
就把随手写的一个简单聊天来给大家共享,切磋一下。
由于考虑到某些局部原因,只发表了一些重要技术方面的资料,没有把全部东西共享。请个人体谅。
由于DWR2.0有个Bug ,我用的DWR1.0,但是,它必须用JDK1.4
dwr.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
  <init></init>
  <allow>
 <create creator="new" javascript="CityChatsend" scope="session">
      <param name="class" value="com.aaa.CharChat.DWR.DWRCityChar_send"/>
      <include method="Chat_send"/> 
    </create>
 <create creator="new" javascript="CityChatRead" scope="session">
      <param name="class" value="com.aaa.CharChat.DWR.DWRCityChar_Read"/>
      <include method="ChatRead"/> 
    </create>
 <create creator="new" javascript="CityChatInit" scope="application">
      <param name="class" value="com.aaa.CharChat.DWR.DWRCityChar_Init"/>
      <include method="getNew_Old"/>
   <include method="setNew_Old"/> 
    </create>

  </allow>
</dwr>
DWRCityChar_send JAVA文件
package com.aaa.CharChat.DWR;


import java.sql.*;
import java.util.*;
import com.db.DatabaseConnection;
import com.aaa.CharChat.initSQL.CityChart_InitSQL;
import java.util.Date;
import java.text.SimpleDateFormat;
/**
 *Title  : 魅力城市聊天保存初始变量
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-09-9
 **/
 
public class DWRCityChar_Init
{
 private static int now_ChatId=0;
 private static String InitSay="[公告^_^]:欢迎大家入住魅力城市^_^";
 private static String InitError="[公告^_^]:对不起!系统故障!我们会尽快解决!";
 private static String New_Old="0";
 public static String getInitError()
 {
  return InitError;
 }
 public static String getNew_Old()
 {
  return New_Old;
 }
 public static void setNew_Old()
 {
  New_Old="0";
 }
 public static synchronized void setInitSay(String Say)
 {
  InitSay=Say;
 }
 public static synchronized int getnow_ChatId()
 {
  if(now_ChatId==0)
  {
   int temp_ID=getRenow_ChatId();
   if(temp_ID>0)
   {
    setnow_ChatId(temp_ID);
   }else
   {
    startnewChat(); 
   }
  }
  New_Old="1";//加载聊天记录
  return now_ChatId;
 }
 public static synchronized void setnow_ChatId(int ChatId)
 {
  now_ChatId=ChatId;
 }
 public static synchronized void startnewChat()
 {
  Connection conn=null;
     PreparedStatement prepare=null;
     try
     {
     conn=DatabaseConnection.getConnection();
     prepare=conn.prepareStatement(CityChart_InitSQL.getinsertnewChat());
     Date online=new Date();
        SimpleDateFormat fo=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String riqi=fo.format(online);
        prepare.setString(1,riqi);
        prepare.setString(2,InitSay);
        int result=prepare.executeUpdate();
        if(result>0)
        {
         setnow_ChatId(result);
        }
        else
        {
         startnewChat();
        }
        prepare.close();
        conn.close();
     }catch(Exception we)
     {
         System.out.println(we.getMessage());
     }finally
     {
          try
      {
      if(!conn.isClosed())
      {
      prepare.close();
      conn.close();
      } 
      }
      catch(Exception ew)
      {
      }
     }
 }
 public static int getRenow_ChatId()
 {
 Connection conn=null;
    PreparedStatement prepare=null;
    ResultSet result=null;
    int Return=0;
    try
    {
    conn=DatabaseConnection.getConnection();
    prepare=conn.prepareStatement(CityChart_InitSQL.getselectnewChatId());
    result=prepare.executeQuery();
    if(result.next())
    {
     Return=result.getInt("Id");
    }
    result.close();
    prepare.close();
    conn.close();
    }catch(Exception we)
    {
     Return=-1;
        System.out.println(we.getMessage());
    }finally
    {
          try
     {
     if(!conn.isClosed())
     {
     prepare.close();
     conn.close();
     } 
     }
     catch(Exception ew)
     {
     }
    }
    return Return; 
 }
}


DWRCityChar_send JAVA文件
package com.aaa.CharChat.DWR;

import java.sql.*;
import java.util.*;
import com.db.DatabaseConnection;
import com.aaa.CharChat.DWR.DWRCityChar_Init;
import com.aaa.CharChat.initSQL.CityChart_InitSQL;

/**
 *Title  : 魅力城市聊天发送
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-9-9
 **/
public class DWRCityChar_send
{
 public int Chat_send(String User_name,String Content)
 {
  int Return=0;
  try
  {
  String result="["+User_name+"]说:"+Content;
  int nowId=DWRCityChar_Init.getnow_ChatId();
  
  if(nowId>0)
  {
   Return=dosend(nowId,result);
  }else
  {
   Return=-2;
  }
  }catch(Exception we)
  {
   
  }
  return Return;
 }
 public int dosend(int nowId,String result)
 {
  Connection conn=null;
     PreparedStatement prepare=null;
     PreparedStatement prepare1=null;
     ResultSet resu=null;
     String Content="";
     int Return=0;
     try
     {
     conn=DatabaseConnection.getConnection();
     prepare=conn.prepareStatement(CityChart_InitSQL.getselectChatbyId());
     prepare1=conn.prepareStatement(CityChart_InitSQL.getupdateChatbyId());
     prepare.setInt(1,nowId);
     resu=prepare.executeQuery();
     if(resu.next())
     {
      Content=resu.getString("Content");
     }
     resu.close();
     prepare.close();
     if(Content.length()>4000)
     {
     DWRCityChar_Init.startnewChat();
     nowId=DWRCityChar_Init.getnow_ChatId(); 
     }
     Content=result+"\n"+Content;
     prepare1.setString(1,Content);
     prepare1.setInt(2,nowId);
     Return=prepare1.executeUpdate();
     prepare1.close();
     conn.close();
     }catch(Exception we)
     {
      Return=-1;
         System.out.println(we.getMessage());
     }finally
     {
           try
      {
      if(!conn.isClosed())
      {
      prepare.close();
      prepare1.close();
      conn.close();
      } 
      }
      catch(Exception ew)
      {
      }
     }
     return Return;
 }
}

DWRCityChar_Read java文件
package com.aaa.CharChat.DWR;

import java.sql.*;
import java.util.*;
import com.db.DatabaseConnection;
import com.aaa.CharChat.DWR.DWRCityChar_Init;
import com.aaa.CharChat.initSQL.CityChart_InitSQL;

/**
 *Title  : 魅力城市聊天发送
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-9-9
 **/
public class DWRCityChar_send
{
 public int Chat_send(String User_name,String Content)
 {
  int Return=0;
  try
  {
  String result="["+User_name+"]说:"+Content;
  int nowId=DWRCityChar_Init.getnow_ChatId();
  
  if(nowId>0)
  {
   Return=dosend(nowId,result);
  }else
  {
   Return=-2;
  }
  }catch(Exception we)
  {
   
  }
  return Return;
 }
 public int dosend(int nowId,String result)
 {
  Connection conn=null;
     PreparedStatement prepare=null;
     PreparedStatement prepare1=null;
     ResultSet resu=null;
     String Content="";
     int Return=0;
     try
     {
     conn=DatabaseConnection.getConnection();
     prepare=conn.prepareStatement(CityChart_InitSQL.getselectChatbyId());
     prepare1=conn.prepareStatement(CityChart_InitSQL.getupdateChatbyId());
     prepare.setInt(1,nowId);
     resu=prepare.executeQuery();
     if(resu.next())
     {
      Content=resu.getString("Content");
     }
     resu.close();
     prepare.close();
     if(Content.length()>4000)
     {
     DWRCityChar_Init.startnewChat();
     nowId=DWRCityChar_Init.getnow_ChatId(); 
     }
     Content=result+"\n"+Content;
     prepare1.setString(1,Content);
     prepare1.setInt(2,nowId);
     Return=prepare1.executeUpdate();
     prepare1.close();
     conn.close();
     }catch(Exception we)
     {
      Return=-1;
         System.out.println(we.getMessage());
     }finally
     {
           try
      {
      if(!conn.isClosed())
      {
      prepare.close();
      prepare1.close();
      conn.close();
      } 
      }
      catch(Exception ew)
      {
      }
     }
     return Return;
 }
}

用到的JAVASCRIPT    JS文件

/**
 *Title  : 魅力城市聊天
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-09-9
 **/
var Send_state=0;//发送状态
var Chat_sendTime=500;
var Chat_sendStart;
var Chat_sendEnd;
var Chat_sendstop;
var Chat_result;
var Chat_startWrite;
var Chat_InitStart;
var Chat_Readtime=500;
function Chathotsend()
{
 if(event.keyCode==10)
 {
  ChatSend();
 }
}
function getChat_Content()
{
 var Content=null;
 var obj=document.getElementById('chat_input');//获取聊天内容
 if(typeof(obj)=='object')
 {
  Content=obj.value;
  if(Content!=null&&Content.length>400)
  {
   alert('对不起!你的聊天内容过长,请你说话要简练扼要!');
  }
 }else
 {
  Content=null;
  alert('程序内部出现异常,抱歉!我们会尽快解决');
 }
 return Content;
}
function ChatSend()
{
 var UserName="";
 var obj=document.getElementById('Chat_User_name');//获取聊天内容
 if(typeof(obj)=='object')
 {
  UserName=obj.value;
 }else
 {
  UserName==null;
  alert('程序内部出现异常,抱歉!我们会尽快解决');
  return;
 }
 var Content=getChat_Content();
 if(Content==null||Content=='')
 {
  ShowAlert('请您输入聊天内容!');
  alert_time=setTimeout('ShowAlertCLose()',alert_showtime);
  alert('请您输入聊天内容!');
  return;
 }
 Chat_sendstop=setTimeout('ShowAlert()',Chat_sendTime);
 doChatSend(UserName,Content);
 var chatobj=document.getElementById('chat_input');
 chatobj.value='';
 chatobj.focus();
 
 
}
function doChatSend(UserName,Content)//聊天发送
{
 Chat_sendStart=new Date();
 CityChatsend.Chat_send(UserName,Content,Chat_doResult);
}
function Chat_doResult(Return)//结果显示
{
 Send_state=Return;
 Chat_sendEnd=new Date();
 var temp=Chat_sendEnd-Chat_sendStart;
 if(temp>50)
 {
  Chat_sendTime=temp;
 }
}
function ShowAlert()
{
 clearTimeout(Chat_sendstop);
 if(Send_state==-1)
 {
  alert('聊天提交时,出现数据库插入异常!抱歉!请你重新输入');
 }else if(Send_state==-2)
 {
  alert('对不起!聊天系统出现异常,给你带来不便。在此,我代表AAA国际向你表示抱歉……');
 }
}
function ChatInit()
{
 setInterval('ChatRead()',Chat_Readtime);
}
function ChatRead()
{
 var chat_updiv=document.getElementById('chat_input_updiv');
 if(chat_updiv.style.display=='')
 {
 CityChatRead.ChatRead(getChatContent);
 Chat_startWrite=setTimeout('WriteChatContent()',1000);
 }
}
function WriteChatContent()
{
 clearTimeout(Chat_startWrite);
 var obj=document.getElementById('chat_content');
 if(typeof(obj)=='object')
 {
 if(Chat_result!=null&&Chat_result!='')
 {
  obj.value=Chat_result;
 }else
 {
  obj.value='数据加载中......';
 }
 }else
 {
  alert('程序内部出现异常,抱歉!我们会尽快解决');
 }
 Chat_result=null;
}
function getChatContent(result)
{
 Chat_result=result;
}

posted @ 2006-09-12 14:17 java^_^枭龙 阅读(1291) | 评论 (0)编辑 收藏

自己在公司网站开发总用DWR开发的一个简单聊天
本人也是在网站开发地图时有到了这个技术,刚学习DWR半个月
就把随手写的一个简单聊天来给大家共享,切磋一下。
由于考虑到某些局部原因,只发表了一些重要技术方面的资料,没有把全部东西共享。请个人体谅。
由于DWR2.0有个Bug ,我用的DWR1.0,但是,它必须用JDK1.4
dwr.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" "http://www.getahead.ltd.uk/dwr/dwr10.dtd">
<dwr>
  <init></init>
  <allow>
 <create creator="new" javascript="CityChatsend" scope="session">
      <param name="class" value="com.aaa.CharChat.DWR.DWRCityChar_send"/>
      <include method="Chat_send"/> 
    </create>
 <create creator="new" javascript="CityChatRead" scope="session">
      <param name="class" value="com.aaa.CharChat.DWR.DWRCityChar_Read"/>
      <include method="ChatRead"/> 
    </create>
 <create creator="new" javascript="CityChatInit" scope="application">
      <param name="class" value="com.aaa.CharChat.DWR.DWRCityChar_Init"/>
      <include method="getNew_Old"/>
   <include method="setNew_Old"/> 
    </create>

  </allow>
</dwr>
DWRCityChar_send JAVA文件
package com.aaa.CharChat.DWR;


import java.sql.*;
import java.util.*;
import com.db.DatabaseConnection;
import com.aaa.CharChat.initSQL.CityChart_InitSQL;
import java.util.Date;
import java.text.SimpleDateFormat;
/**
 *Title  : 魅力城市聊天保存初始变量
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-09-9
 **/
 
public class DWRCityChar_Init
{
 private static int now_ChatId=0;
 private static String InitSay="[公告^_^]:欢迎大家入住魅力城市^_^";
 private static String InitError="[公告^_^]:对不起!系统故障!我们会尽快解决!";
 private static String New_Old="0";
 public static String getInitError()
 {
  return InitError;
 }
 public static String getNew_Old()
 {
  return New_Old;
 }
 public static void setNew_Old()
 {
  New_Old="0";
 }
 public static synchronized void setInitSay(String Say)
 {
  InitSay=Say;
 }
 public static synchronized int getnow_ChatId()
 {
  if(now_ChatId==0)
  {
   int temp_ID=getRenow_ChatId();
   if(temp_ID>0)
   {
    setnow_ChatId(temp_ID);
   }else
   {
    startnewChat(); 
   }
  }
  New_Old="1";//加载聊天记录
  return now_ChatId;
 }
 public static synchronized void setnow_ChatId(int ChatId)
 {
  now_ChatId=ChatId;
 }
 public static synchronized void startnewChat()
 {
  Connection conn=null;
     PreparedStatement prepare=null;
     try
     {
     conn=DatabaseConnection.getConnection();
     prepare=conn.prepareStatement(CityChart_InitSQL.getinsertnewChat());
     Date online=new Date();
        SimpleDateFormat fo=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String riqi=fo.format(online);
        prepare.setString(1,riqi);
        prepare.setString(2,InitSay);
        int result=prepare.executeUpdate();
        if(result>0)
        {
         setnow_ChatId(result);
        }
        else
        {
         startnewChat();
        }
        prepare.close();
        conn.close();
     }catch(Exception we)
     {
         System.out.println(we.getMessage());
     }finally
     {
          try
      {
      if(!conn.isClosed())
      {
      prepare.close();
      conn.close();
      } 
      }
      catch(Exception ew)
      {
      }
     }
 }
 public static int getRenow_ChatId()
 {
 Connection conn=null;
    PreparedStatement prepare=null;
    ResultSet result=null;
    int Return=0;
    try
    {
    conn=DatabaseConnection.getConnection();
    prepare=conn.prepareStatement(CityChart_InitSQL.getselectnewChatId());
    result=prepare.executeQuery();
    if(result.next())
    {
     Return=result.getInt("Id");
    }
    result.close();
    prepare.close();
    conn.close();
    }catch(Exception we)
    {
     Return=-1;
        System.out.println(we.getMessage());
    }finally
    {
          try
     {
     if(!conn.isClosed())
     {
     prepare.close();
     conn.close();
     } 
     }
     catch(Exception ew)
     {
     }
    }
    return Return; 
 }
}


DWRCityChar_send JAVA文件
package com.aaa.CharChat.DWR;

import java.sql.*;
import java.util.*;
import com.db.DatabaseConnection;
import com.aaa.CharChat.DWR.DWRCityChar_Init;
import com.aaa.CharChat.initSQL.CityChart_InitSQL;

/**
 *Title  : 魅力城市聊天发送
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-9-9
 **/
public class DWRCityChar_send
{
 public int Chat_send(String User_name,String Content)
 {
  int Return=0;
  try
  {
  String result="["+User_name+"]说:"+Content;
  int nowId=DWRCityChar_Init.getnow_ChatId();
  
  if(nowId>0)
  {
   Return=dosend(nowId,result);
  }else
  {
   Return=-2;
  }
  }catch(Exception we)
  {
   
  }
  return Return;
 }
 public int dosend(int nowId,String result)
 {
  Connection conn=null;
     PreparedStatement prepare=null;
     PreparedStatement prepare1=null;
     ResultSet resu=null;
     String Content="";
     int Return=0;
     try
     {
     conn=DatabaseConnection.getConnection();
     prepare=conn.prepareStatement(CityChart_InitSQL.getselectChatbyId());
     prepare1=conn.prepareStatement(CityChart_InitSQL.getupdateChatbyId());
     prepare.setInt(1,nowId);
     resu=prepare.executeQuery();
     if(resu.next())
     {
      Content=resu.getString("Content");
     }
     resu.close();
     prepare.close();
     if(Content.length()>4000)
     {
     DWRCityChar_Init.startnewChat();
     nowId=DWRCityChar_Init.getnow_ChatId(); 
     }
     Content=result+"\n"+Content;
     prepare1.setString(1,Content);
     prepare1.setInt(2,nowId);
     Return=prepare1.executeUpdate();
     prepare1.close();
     conn.close();
     }catch(Exception we)
     {
      Return=-1;
         System.out.println(we.getMessage());
     }finally
     {
           try
      {
      if(!conn.isClosed())
      {
      prepare.close();
      prepare1.close();
      conn.close();
      } 
      }
      catch(Exception ew)
      {
      }
     }
     return Return;
 }
}

DWRCityChar_Read java文件
package com.aaa.CharChat.DWR;

import java.sql.*;
import java.util.*;
import com.db.DatabaseConnection;
import com.aaa.CharChat.DWR.DWRCityChar_Init;
import com.aaa.CharChat.initSQL.CityChart_InitSQL;

/**
 *Title  : 魅力城市聊天发送
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-9-9
 **/
public class DWRCityChar_send
{
 public int Chat_send(String User_name,String Content)
 {
  int Return=0;
  try
  {
  String result="["+User_name+"]说:"+Content;
  int nowId=DWRCityChar_Init.getnow_ChatId();
  
  if(nowId>0)
  {
   Return=dosend(nowId,result);
  }else
  {
   Return=-2;
  }
  }catch(Exception we)
  {
   
  }
  return Return;
 }
 public int dosend(int nowId,String result)
 {
  Connection conn=null;
     PreparedStatement prepare=null;
     PreparedStatement prepare1=null;
     ResultSet resu=null;
     String Content="";
     int Return=0;
     try
     {
     conn=DatabaseConnection.getConnection();
     prepare=conn.prepareStatement(CityChart_InitSQL.getselectChatbyId());
     prepare1=conn.prepareStatement(CityChart_InitSQL.getupdateChatbyId());
     prepare.setInt(1,nowId);
     resu=prepare.executeQuery();
     if(resu.next())
     {
      Content=resu.getString("Content");
     }
     resu.close();
     prepare.close();
     if(Content.length()>4000)
     {
     DWRCityChar_Init.startnewChat();
     nowId=DWRCityChar_Init.getnow_ChatId(); 
     }
     Content=result+"\n"+Content;
     prepare1.setString(1,Content);
     prepare1.setInt(2,nowId);
     Return=prepare1.executeUpdate();
     prepare1.close();
     conn.close();
     }catch(Exception we)
     {
      Return=-1;
         System.out.println(we.getMessage());
     }finally
     {
           try
      {
      if(!conn.isClosed())
      {
      prepare.close();
      prepare1.close();
      conn.close();
      } 
      }
      catch(Exception ew)
      {
      }
     }
     return Return;
 }
}

用到的JAVASCRIPT    JS文件

/**
 *Title  : 魅力城市聊天
 *Author : JAVA^_^枭龙---孙德华
 *Project: 数字城市
 *Date   : 2006-09-9
 **/
var Send_state=0;//发送状态
var Chat_sendTime=500;
var Chat_sendStart;
var Chat_sendEnd;
var Chat_sendstop;
var Chat_result;
var Chat_startWrite;
var Chat_InitStart;
var Chat_Readtime=500;
function Chathotsend()
{
 if(event.keyCode==10)
 {
  ChatSend();
 }
}
function getChat_Content()
{
 var Content=null;
 var obj=document.getElementById('chat_input');//获取聊天内容
 if(typeof(obj)=='object')
 {
  Content=obj.value;
  if(Content!=null&&Content.length>400)
  {
   alert('对不起!你的聊天内容过长,请你说话要简练扼要!');
  }
 }else
 {
  Content=null;
  alert('程序内部出现异常,抱歉!我们会尽快解决');
 }
 return Content;
}
function ChatSend()
{
 var UserName="";
 var obj=document.getElementById('Chat_User_name');//获取聊天内容
 if(typeof(obj)=='object')
 {
  UserName=obj.value;
 }else
 {
  UserName==null;
  alert('程序内部出现异常,抱歉!我们会尽快解决');
  return;
 }
 var Content=getChat_Content();
 if(Content==null||Content=='')
 {
  ShowAlert('请您输入聊天内容!');
  alert_time=setTimeout('ShowAlertCLose()',alert_showtime);
  alert('请您输入聊天内容!');
  return;
 }
 Chat_sendstop=setTimeout('ShowAlert()',Chat_sendTime);
 doChatSend(UserName,Content);
 var chatobj=document.getElementById('chat_input');
 chatobj.value='';
 chatobj.focus();
 
 
}
function doChatSend(UserName,Content)//聊天发送
{
 Chat_sendStart=new Date();
 CityChatsend.Chat_send(UserName,Content,Chat_doResult);
}
function Chat_doResult(Return)//结果显示
{
 Send_state=Return;
 Chat_sendEnd=new Date();
 var temp=Chat_sendEnd-Chat_sendStart;
 if(temp>50)
 {
  Chat_sendTime=temp;
 }
}
function ShowAlert()
{
 clearTimeout(Chat_sendstop);
 if(Send_state==-1)
 {
  alert('聊天提交时,出现数据库插入异常!抱歉!请你重新输入');
 }else if(Send_state==-2)
 {
  alert('对不起!聊天系统出现异常,给你带来不便。在此,我代表AAA国际向你表示抱歉……');
 }
}
function ChatInit()
{
 setInterval('ChatRead()',Chat_Readtime);
}
function ChatRead()
{
 var chat_updiv=document.getElementById('chat_input_updiv');
 if(chat_updiv.style.display=='')
 {
 CityChatRead.ChatRead(getChatContent);
 Chat_startWrite=setTimeout('WriteChatContent()',1000);
 }
}
function WriteChatContent()
{
 clearTimeout(Chat_startWrite);
 var obj=document.getElementById('chat_content');
 if(typeof(obj)=='object')
 {
 if(Chat_result!=null&&Chat_result!='')
 {
  obj.value=Chat_result;
 }else
 {
  obj.value='数据加载中......';
 }
 }else
 {
  alert('程序内部出现异常,抱歉!我们会尽快解决');
 }
 Chat_result=null;
}
function getChatContent(result)
{
 Chat_result=result;
}

posted @ 2006-09-12 14:17 java^_^枭龙 阅读(2154) | 评论 (1)编辑 收藏


posts - 2, comments - 1, trackbacks - 0, articles - 0

Copyright © java^_^枭龙