| 224 | } |
| 225 | |
| 226 | func (srv *Server) buildResponse(reply *message.Reply) (err error) { |
| 227 | defer func() { |
| 228 | if e := recover(); e != nil { |
| 229 | err = fmt.Errorf("panic error: %v\n%s", e, debug.Stack()) |
| 230 | } |
| 231 | }() |
| 232 | if reply == nil { |
| 233 | // do nothing |
| 234 | return nil |
| 235 | } |
| 236 | msgType := reply.MsgType |
| 237 | switch msgType { |
| 238 | case message.MsgTypeText: |
| 239 | case message.MsgTypeImage: |
| 240 | case message.MsgTypeVoice: |
| 241 | case message.MsgTypeVideo: |
| 242 | case message.MsgTypeMusic: |
| 243 | case message.MsgTypeNews: |
| 244 | case message.MsgTypeTransfer: |
| 245 | default: |
| 246 | err = message.ErrUnsupportReply |
| 247 | return |
| 248 | } |
| 249 | |
| 250 | msgData := reply.MsgData |
| 251 | value := reflect.ValueOf(msgData) |
| 252 | // msgData must be a ptr |
| 253 | kind := value.Kind().String() |
| 254 | if kind != "ptr" { |
| 255 | return message.ErrUnsupportReply |
| 256 | } |
| 257 | |
| 258 | params := make([]reflect.Value, 1) |
| 259 | params[0] = reflect.ValueOf(srv.RequestMsg.FromUserName) |
| 260 | value.MethodByName("SetToUserName").Call(params) |
| 261 | |
| 262 | params[0] = reflect.ValueOf(srv.RequestMsg.ToUserName) |
| 263 | value.MethodByName("SetFromUserName").Call(params) |
| 264 | |
| 265 | params[0] = reflect.ValueOf(msgType) |
| 266 | value.MethodByName("SetMsgType").Call(params) |
| 267 | |
| 268 | params[0] = reflect.ValueOf(util.GetCurrTS()) |
| 269 | value.MethodByName("SetCreateTime").Call(params) |
| 270 | |
| 271 | srv.ResponseMsg = msgData |
| 272 | srv.ResponseRawXMLMsg, err = xml.Marshal(msgData) |
| 273 | return |
| 274 | } |
| 275 | |
| 276 | // Send 将自定义的消息发送 |
| 277 | func (srv *Server) Send() (err error) { |