private void OnStartActivityRes(StartRes res) { //先更新GlobaData的数据,然后回到应援活动界面! LoadingOverlay.Instance.Hide(); FlowText.ShowMessage(I18NManager.Get("SupporterActivity_StartSuccess") + SupporterActivityModel.EncourageRuleDic[res.UserEncourageActivity.ActId].Title); //GlobalData.PlayerModel.UpdateUserPower(res.UserPower); // Debug.LogError(res.UserEncourageActivity); GlobalData.PropModel.UpdateProps(res.UserItems); //就这里可能出现问题! foreach (var v in res.UserFans) { GlobalData.DepartmentData.UpdateFansWithNum(v.FansType, v.Num); } SupporterActivityModel.UpdateEncourageActs(res.UserEncourageActivity); SupporterActivityModel.GetUserActVo(res.UserEncourageActivity.Id).NeedToChangeAni = true; SendMessage(new Message(MessageConst.CMD_SUPPORTERACTIVITY_STARTSUCCESS, res.LeftInterCount)); EventDispatcher.TriggerEvent(EventConst.UpdateEnergy); SendMessage(new Message(MessageConst.MOUDLE_GUIDE_SUPPORTERACT_STARTSUCCESS)); }
// Main function. It is capable of invoking new workers, adding and removing clients and transfering requests and replies between them public void Broker() { ZMessage incoming; ZError error; var poll = ZPollItem.CreateReceiver(); while (!_stopLoops) { if (workers_socket.PollIn(poll, out incoming, out error, TimeSpan.FromMilliseconds(64))) { string worker_id = incoming[0].ReadString(); workers.Add(worker_id); string client_id = incoming[2].ReadString(); if (client_id != "READY") { using (var outgoing = new ZMessage()) { var response = Serializer.Deserialize <Response>(incoming[4]); var res = response as ClaimRes; if (res.Ok) { //Console.WriteLine(res.Ok.ToString() + " " + res.Position[0].ToString() + " " + res.Position[1].ToString() + " " + res.UserId.ToString()); playfield[res.Position[0] - 1, res.Position[1] - 1] = res.UserId; } outgoing.Add(incoming[2]); outgoing.Add(new ZFrame()); outgoing.Add(incoming[4]); users_socket.Send(outgoing); requests++; } } } if (workers.Count > 0) { while (toRemove > 0) { toRemove--; var request = new StartReq() { desire = true }; using (var message = new ZMessage()) using (var responseStream = new MemoryStream()) { message.Add(new ZFrame(workers[0])); message.Add(new ZFrame()); message.Add(new ZFrame()); message.Add(new ZFrame()); Serializer.Serialize(responseStream, request); message.Add(new ZFrame(responseStream.ToArray())); workers_socket.Send(message); } while (workers.Count == 0) { Thread.Sleep(10); } } if (users_socket.PollIn(poll, out incoming, out error, TimeSpan.FromMilliseconds(64))) { using (var receivedFrame = incoming[2]) { var request = Serializer.Deserialize <Request>(receivedFrame); //Console.WriteLine(request.RequesType); switch (request.RequesType) { case RequesType.ClaimReq: { using (var outgoing = new ZMessage()) { outgoing.Add(new ZFrame(workers[0])); outgoing.Add(new ZFrame()); outgoing.Add(incoming[0]); outgoing.Add(new ZFrame()); outgoing.Add(incoming[2]); workers_socket.Send(outgoing); } workers.RemoveAt(0); break; } case RequesType.StartReq: { var sr = request as StartReq; //Console.WriteLine(request.RequesType); var response = new StartRes(); response.size = size; if (sr.desire) { if (users.Contains(request.UserId)) { response.Ok = false; } else { response.Ok = true; response.Position = new List <int> { _random.Next(0, size), _random.Next(0, size) }; users.Add(request.UserId); playfield[response.Position[0], response.Position[1]] = request.UserId; requests++; if ((users.Count == 2) || (users.Count / 10 > workerCount)) { Process.Start(workersList[workerCount % workersList.Count], size.ToString() + " " + (++workerCount).ToString() + " " + myAdress); Console.WriteLine("New worker added, id: " + workerCount); } Console.WriteLine("New user added, id: {0}, symbol: {0}", request.UserId); } } else { users.Remove(request.UserId); if (users.Count == 1 || ((users.Count) % 10 == 0 && users.Count > 0)) { toRemove++; } Console.WriteLine("User removed, id: {0}, symbol: {0}", request.UserId); response.Ok = true; for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { if (playfield[i, j] == request.UserId) { playfield[i, j] = 0; } } } } using (var responseStream = new MemoryStream()) using (var outgoing = new ZMessage()) { Serializer.Serialize(responseStream, response); outgoing.Add(incoming[0]); outgoing.Add(new ZFrame()); outgoing.Add(new ZFrame(responseStream.ToArray())); users_socket.Send(outgoing); } break; } } } } } } }