func taskSharedHandler(r *http.Request, w http.ResponseWriter, redis *models.RedisLogger, user *models.Account, p Parameter) { form := p.(taskSharedForm) u := &models.Account{} u.FindByUserid(form.Sender) // ws push event := &models.Event{ Type: models.EventSystem, Time: time.Now().Unix(), Data: models.EventData{ Id: user.Id, From: user.Id, To: form.Sender, }, } var article *models.Article switch form.Type { case models.TaskRunning: event.Data.Type = models.EventRunShared article = &models.Article{ Author: user.Id, PubTime: time.Now(), Contents: []models.Segment{ {ContentType: "TEXT", ContentText: "我和" + u.Nickname + "约好一起跑步,有想一起参加的吗?" + "\n跑步地点: " + form.Addr + "\n跑步时间: " + time.Unix(form.Time, 0).Format("2006-01-02 3:04 PM")}, {ContentType: "IMAGE", ContentText: form.Image}, }, } case models.TaskPost: article := &models.Article{} if find, _ := article.FindById(form.ArticleId); find { article.SetThumb(user.Id, true) } event.Data.Type = models.EventPostShared case models.TaskGame: event.Data.Type = models.EventPKShared result := u.Nickname + " 主动PK " + user.Nickname + "大获全胜。" if u.Props.Score < user.Props.Score { result = u.Nickname + " 主动PK " + user.Nickname + "大败亏输。" } article = &models.Article{ Author: user.Id, Type: "pk", PubTime: time.Now(), Contents: []models.Segment{ {ContentType: "TEXT", ContentText: result}, {ContentType: "IMAGE", ContentText: form.Image}, }, } default: writeResponse(r.RequestURI, w, nil, errors.NewError(errors.AccessError)) return } awards := Awards{} if form.Accept { redis.SetRelationship(user.Id, []string{form.Sender}, models.RelFriend, true) event.Save() redis.PubMsg(models.EventSystem, form.Sender, event.Bytes()) user.UpdateRatio(form.Type, true) if article != nil { article.Save() } awards.Wealth = 1 * models.Satoshi GiveAwards(user, awards, redis) } redis.SetTaskShare(user.Id, false) writeResponse(r.RequestURI, w, map[string]interface{}{"ExpEffect": awards}, nil) }
func taskShareHandler(r *http.Request, w http.ResponseWriter, redis *models.RedisLogger, user *models.Account, p Parameter) { form := p.(taskShareForm) if form.TaskId > len(models.NewTasks) { writeResponse(r.RequestURI, w, nil, errors.NewError(errors.AccessError)) return } //task := models.NewTasks[form.TaskId] // ws push event := &models.Event{ Type: models.EventSystem, Time: time.Now().Unix(), Data: models.EventData{ //Type: models.EventRunShare, Id: user.Id, From: user.Id, To: form.Userid, }, } switch form.Type { case models.TaskRunning: record, _ := user.LastRecord("run") latlng := strconv.FormatFloat(form.Lat, 'f', 7, 64) + "," + strconv.FormatFloat(form.Lng, 'f', 7, 64) event.Data.Type = models.EventRunShare event.Data.Body = []models.MsgBody{ {Type: "record_id", Content: record.Id.Hex()}, {Type: "latlng", Content: latlng}, {Type: "locaddr", Content: form.Addr}, {Type: "time", Content: strconv.FormatInt(form.Time, 10)}, {Type: "addr_image", Content: form.Image}, } case models.TaskPost: event.Data.Type = models.EventPostShare article := user.LatestArticle() event.Data.Body = []models.MsgBody{ {Type: "article_id", Content: article.Id.Hex()}, } case models.TaskGame: record, _ := user.LastRecord("run") event.Data.Type = models.EventPKShare event.Data.Body = []models.MsgBody{ {Type: "record_id", Content: record.Id.Hex()}, } default: writeResponse(r.RequestURI, w, nil, errors.NewError(errors.AccessError)) return } event.Save() redis.PubMsg(event.Type, event.Data.To, event.Bytes()) u := &models.Account{Id: form.Userid} u.UpdateRatio(form.Type, false) redis.SetTaskShare(form.Userid, true) if _, err := consumeCoin(user.Wallet.Addr, form.Coin); err == nil { redis.ConsumeCoins(user.Id, form.Coin) } writeResponse(r.RequestURI, w, nil, nil) }