package com.ankerdiao.practice.mptest;
//package com.paipai.study.mp;
//
//import java.io.ByteArrayInputStream;
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.security.MessageDigest;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.Map;
//
//import javax.servlet.ServletInputStream;
//import javax.servlet.http.HttpServletRequest;
//import javax.xml.bind.JAXBContext;
//import javax.xml.bind.JAXBException;
//import javax.xml.bind.Marshaller;
//import javax.xml.bind.Unmarshaller;
//
//import org.apache.struts2.ServletActionContext;
//
//import com.paipai.api.BaseApiAction;
//import com.paipai.util.log.TLog;
//
//
//public class CheckAliveServerAction extends BaseApiAction{
//	
//	private static final long serialVersionUID = -8196939088969327402L;
//	
//	private static final String wxtoken="321313131313131312312313131";
//	
//	
//
//	//
//	private String bodyContent;
//	//
//	private String signature;
//	private String timestamp;
//	private String nonce;
//	private String echostr;
//	
//	
//
//	private static Map<String, String> ipMap = new HashMap<String, String>();
//	private static Map<String, Unmarshaller> unmarshallerMap = new HashMap<String, Unmarshaller>();
//	private static Map<String, Marshaller> marshallerMap = new HashMap<String, Marshaller>();
//	
//	
//	static{
//		ipMap.put("101.226.33.171", "101.226.33.171");
//		ipMap.put("101.226.33.172", "101.226.33.171");
//		ipMap.put("101.226.33.173", "101.226.33.171");
//		ipMap.put("101.226.33.174", "101.226.33.171");
//		try {
//			unmarshallerMap.put(ReceiveMessage.class.getName(), parset(ReceiveMessage.class));
//			unmarshallerMap.put(ReceiveImageMessage.class.getName(), parset(ReceiveImageMessage.class));
//			unmarshallerMap.put(ReceiveTextMessage.class.getName(), parset(ReceiveTextMessage.class));
//			
//			marshallerMap.put(SendTextMessage.class.getName(), marshaller(SendTextMessage.class));
//			marshallerMap.put(SendNewsMessage.class.getName(), marshaller(SendNewsMessage.class));
//		} catch (JAXBException e) {
//			e.printStackTrace();
//		}
//	}
//	
//	
//	
//	public static <T> Unmarshaller parset(Class<T> t) throws JAXBException{
//		JAXBContext context = JAXBContext.newInstance(t);
//		Unmarshaller  unmarshaller = context.createUnmarshaller();
//		return unmarshaller;
//	}
//	
//	@SuppressWarnings("unchecked")
//	public static <T> T parset(Class<T> t, Unmarshaller unmarshaller, String str, String charset){
//		try {
//			ByteArrayInputStream inputStream = new ByteArrayInputStream(str.getBytes(charset));
//			T news = (T) unmarshaller.unmarshal(inputStream);
//			return news;
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return null;
//	}
//
//	public static <T> Marshaller marshaller(Class<T> t) throws JAXBException{
//		JAXBContext context = JAXBContext.newInstance(t);
//		Marshaller marshaller = context.createMarshaller();
//		return marshaller;
//	}
//	
//	public static <T> ByteArrayOutputStream marshal(T t, Marshaller marshaller, String charset){
//		try {
//			marshaller.setProperty("jaxb.formatted.output", true);
//			marshaller.setProperty("jaxb.encoding", charset);
//			marshaller.setProperty("jaxb.fragment", true);
//			ByteArrayOutputStream os = new ByteArrayOutputStream();
//			marshaller.marshal(t, os);
//			return os;
//		} catch (Exception e) {
//			
//		}
//		return null;
//	}
//	
//	
//    public static String getRealIp(HttpServletRequest request) {
//    	String ip = request.getHeader("X-Real-IP");		
//		if(ip == null)
//		{
//			ip = request.getRemoteAddr();
//		}
//		return ip;
//    }
//	
//	public static String byte2hex(byte[] b) // ������ת�ַ�
//	{
//		StringBuffer hs = new StringBuffer();
//		String stmp = "";
//		for (int n = 0; n < b.length; n++) {
//			stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
//			if (stmp.length() == 1)
//				hs.append(0).append(stmp);
//			else
//				hs.append(stmp);
//		}
//		return hs.toString();
//	}
//    
//	
//	@Override
//	public String excuteAPI() {
//		try {
//			long now = System.currentTimeMillis();
//			long time = Long.parseLong(timestamp)*1000L;
//			if((now-time)>5*1000){
//				TLog.error("timestamp error, now="+now+"	timetamp="+time);
//				return "error";
//			}
//			
//			String[] a = {wxtoken,timestamp,nonce};
//			TLog.debug(Arrays.toString(a));
//			Arrays.sort(a);
//			TLog.debug(Arrays.toString(a));
//			StringBuffer buffer = new StringBuffer();
//			for (String str : a) {
//				buffer.append(str);
//			}
//			
//			MessageDigest digest = MessageDigest.getInstance("SHA-1");
//			digest.update(buffer.toString().getBytes(charset)); 
//		    byte[] digesta=digest.digest(); 
//		    String sign = byte2hex(digesta);
//		    
//			TLog.debug(signature+"	signature");
//			TLog.debug(sign+"	sign");
//			
//			if(!sign.equalsIgnoreCase(signature)){
//				return "error";//ǩ����֤ʧ��
//			}
//			
//			if(echostr!=null){
//				bodyContent=echostr;
//				return "success";//��֤������
//			}
//			
//		} catch (Exception e) {
//			TLog.error(e);
//			return "error";
//		}
//		
//		try {
//			HttpServletRequest request = ServletActionContext.getRequest();
//			String realIp = getRealIp(request);
//			
//			TLog.debug(charset+"	"+realIp);
//			
//			if(ipMap.get(realIp)==null){
//				bodyContent = "<xml>realIp error "+ realIp+"</xml>";
//				return "success";
//			}
//			
//			ServletInputStream stream = request.getInputStream();
//			ByteArrayOutputStream outStream = new ByteArrayOutputStream();
//			String message = getStreamAsString(stream, outStream, charset);
//			TLog.debug("\n"+message);
//			
//			SendNewsMessage send = new SendNewsMessage();
//			
//			ReceiveMessage mesg = unmarshaller(ReceiveMessage.class, message);
//			TLog.debug(mesg);
//			send.FromUserName = mesg.ToUserName;
//			send.ToUserName = mesg.FromUserName;
//			NewsItem e = new NewsItem();
//			e.PicUrl="http://pic25.nipic.com/20121124/2004813_103518816000_2.jpg";
//			e.Title="��ɽ˫�米�� ��ɫ";
//			e.Url = "http://www.nipic.com/show/2/88/7156587kefc44496.html";
//			send.Articles.items.add(e);
//			send.ArticleCount = send.Articles.items.size();
//			if(mesg.MsgType.equals("text")){
//				ReceiveTextMessage receive = unmarshaller(ReceiveTextMessage.class, message);
//				TLog.debug(receive);
//				e.Description = "΢�ż���ǩ��,ignature����˿�������д��token����������е�timestamp����nonce����"
//				+receive.Content;
//			}
//			
//			
//			ByteArrayOutputStream outputStream = marshaller(send);
//			
//			bodyContent = outputStream.toString(charset);
//			
//			TLog.debug(bodyContent);
//			
//		} catch (IOException e) {
//			TLog.error(e);
//		}
//		
//		
//		return "success";
//	}
//
//	private <T> ByteArrayOutputStream marshaller(T t) {
//		Marshaller marshaller = marshallerMap.get(t.getClass().getName());
//		if(marshaller!=null){
//			ByteArrayOutputStream marshal = marshal(t, marshaller, charset);
//			return marshal;
//		}
//		return null;
//	}
//
//	private <T> T unmarshaller(Class<T> t, String message) {
//		Unmarshaller unmarshaller = unmarshallerMap.get(t.getName());
//		if(unmarshaller!=null){
//			T receive = parset(t, unmarshaller, message, charset);
//			return receive;
//		}
//		return null;
//	}
//	
//	
//	private static String getStreamAsString(InputStream stream,
//			ByteArrayOutputStream outStream, String charset) throws IOException {
//		try {
////			InputStreamReader reader = new InputStreamReader(stream, charset);
////			StringWriter writer = new StringWriter();
//			byte[] chars = new byte[256];
//			int count = 0;
//			while ((count = stream.read(chars)) > 0) {
//				outStream.write(chars, 0, count);
//			}
//			return new String(outStream.toByteArray(), charset);
//		} finally {
//			if (stream != null) {
//				stream.close();
//			}
//		}
//	}
//
//	public String getBodyContent() {
//		return bodyContent;
//	}
//
//	public String getSignature() {
//		return signature;
//	}
//
//	public void setSignature(String signature) {
//		this.signature = signature;
//	}
//
//	public String getTimestamp() {
//		return timestamp;
//	}
//
//	public void setTimestamp(String timestamp) {
//		this.timestamp = timestamp;
//	}
//
//	public String getNonce() {
//		return nonce;
//	}
//
//	public void setNonce(String nonce) {
//		this.nonce = nonce;
//	}
//
//	public String getEchostr() {
//		return echostr;
//	}
//
//	public void setEchostr(String echostr) {
//		this.echostr = echostr;
//	}
//
//	
//	
//}
