static void ModifySuccess(ref ModifyMsg msg, MyNetworkClient sender) { Dictionary<int, MyGps> gpsList; var result = MySession.Static.Gpss.m_playerGpss.TryGetValue(msg.IdentityId, out gpsList); if (result) { MyGps gps; if (gpsList.TryGetValue(msg.Hash, out gps)) { gps.Name = msg.Name; gps.Description = msg.Description; gps.Coords = msg.Coords; gps.DiscardAt = null;//finalize at edit var handler = MySession.Static.Gpss.GpsChanged;//because of name in table if (handler != null) { handler(msg.IdentityId, gps.Hash); } gpsList.Remove(gps.Hash); MyHud.GpsMarkers.UnregisterMarker(gps); gps.UpdateHash(); //if an entry exists, we will remove it, then isert this => user overwrited old entry: if (gpsList.ContainsKey(gps.Hash)) { MyGps oldGps; gpsList.TryGetValue(gps.Hash, out oldGps); MyHud.GpsMarkers.UnregisterMarker(oldGps); gpsList.Remove(gps.Hash); gpsList.Add(gps.Hash, gps);//new key var handlerList = MySession.Static.Gpss.ListChanged;//we have merged two entries... if (handlerList != null) { handlerList(msg.IdentityId); } } else gpsList.Add(gps.Hash, gps);//new key if (msg.IdentityId == MySession.LocalPlayerId && gps.ShowOnHud) MyHud.GpsMarkers.RegisterMarker(gps); } } }
static void ModifyRequest(ref ModifyMsg msg, MyNetworkClient sender) { Dictionary<int, MyGps> gpsList; var result = MySession.Static.Gpss.m_playerGpss.TryGetValue(msg.IdentityId, out gpsList); if (result) if (gpsList.ContainsKey(msg.Hash)) Sync.Layer.SendMessageToAllAndSelf(ref msg, MyTransportMessageEnum.Success); }
static void ModifyRequest(ModifyMsg msg) { Dictionary<int, MyGps> gpsList; var result = MySession.Static.Gpss.m_playerGpss.TryGetValue(msg.IdentityId, out gpsList); if (result) if (gpsList.ContainsKey(msg.Hash)) MyMultiplayer.RaiseStaticEvent(s => MyGpsCollection.ModifySuccess, msg); }
//MODIFY: public void SendModifyGps(long identityId, MyGps gps) {//beware: gps must still contain original hash. Recompute during/after success. var msg = new ModifyMsg(); msg.IdentityId = identityId; msg.Name = gps.Name; msg.Description = gps.Description; msg.Coords = gps.Coords; msg.Hash = gps.Hash; Sync.Layer.SendMessageToServer(ref msg, MyTransportMessageEnum.Request); }
//MODIFY: public void SendModifyGps(long identityId, MyGps gps) {//beware: gps must still contain original hash. Recompute during/after success. var msg = new ModifyMsg(); msg.IdentityId = identityId; msg.Name = gps.Name; msg.Description = gps.Description; msg.Coords = gps.Coords; msg.Hash = gps.Hash; MyMultiplayer.RaiseStaticEvent(s => MyGpsCollection.ModifyRequest, msg); }