internal void SyncNow() { foreach (var one in properties) { Object c; if (!stringToObject.TryGetValue(one.Key, out c)) { continue; } string method = getSyncMethod(c); DataStorage ds = DataStorage.CreateForWrite(); ds.Push(method); var fields = GetClassFields(c); if (fields.Count == 0) { continue; } foreach (var field in fields) { ds.Push(field.Key); IMarshalable imObj = field.Value as IMarshalable; if (imObj != null) { pushCustomType(imObj, ds); continue; } pushBasicType(field.Value, ds); } NetworkController.Instance.SendMessage(ds, (short)MessageType.Resend); } }
/// <summary> /// Send a Rdprfx message. /// </summary> /// <param name="rfxMessage">The Rdprfx message to be sent.</param> private void AddToPendingList(IMarshalable rfxMessage) { lock (syncLocker) { byte[] data = rfxMessage.ToBytes(); pendingBuffer.AddRange(data); } }
public Task AcceptProxyAsync(IMarshalable marshalable, bool dispose = true) { this.ReceivedProxy = marshalable; if (dispose) { marshalable.Dispose(); } return(Task.CompletedTask); }
private void pushCustomType(IMarshalable obj, DataStorage ds) { IMarshalable imObj = obj as IMarshalable; if (imObj == null) { NetworkController.ShowException(new Exception("invalid rpc parameter")); } ds.Push(obj.GetType().FullName, imObj); }
/// <summary> /// Add a Rdprfx message data into byte list. /// </summary> private void AddToPendingList(IMarshalable rfxMessage) { lock (syncLocker) { byte[] data = rfxMessage.ToBytes(); pendingRfxBuffer.AddRange(data); } }
private object parseCustomType(IMarshalable obj, DataStorage ds) { obj.ReadFromDs(ds); return(obj); }
public Task GiveMarshalable(IMarshalable marshalable) { marshalable.DoSomething(); return(Task.CompletedTask); }