/// <summary> /// Add a dictionary to this Command.You can get This Data with getDic in slave node. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="name">Name of this dictionary</param> /// <param name="dic">Dictionary Instance</param> public void addDic <K, V>(string name, Dictionary <K, V> dic) { if (name == null) { return; } typeCheck(typeof(K)); typeCheck(typeof(V)); genericData _data = new genericData(); _data.keyTypeName = typeof(K).AssemblyQualifiedName; _data.valueTypeName = typeof(V).AssemblyQualifiedName; Debug.Log("type1:" + _data.keyTypeName + " type2:" + _data.valueTypeName); _data.containerTypeName = "dic"; var enu = dic.GetEnumerator(); while (enu.MoveNext()) { _data.valueData.Add(enu.Current.Key); _data.valueData.Add(enu.Current.Value); } _genericMap.Add_overlay(name, _data); }
public void addStack <T>(string name, Stack <T> stack) { if (name == null) { return; } typeCheck(typeof(T)); genericData _data = new genericData(); _data.valueTypeName = typeof(T).AssemblyQualifiedName; _data.containerTypeName = "stack"; var enu = stack.GetEnumerator(); while (enu.MoveNext()) { _data.valueData.Add(enu.Current); } _genericMap.Add_overlay(name, _data); }
//用于Debug工具中 游览事件信息 为该事件创建快照并保存起来 static public ClusterCommand createSnapShot(ClusterCommand e) { if (e != null) { ClusterCommand newCommand = new ClusterCommand(e.getCommandName()); var enu = e._paraMap.GetEnumerator(); while (enu.MoveNext()) { newCommand._paraMap.Add(enu.Current.Key, enu.Current.Value.ToString()); } var collEnu = e._genericMap.GetEnumerator(); while (collEnu.MoveNext()) { var ins = new genericData(); ins.containerTypeName = collEnu.Current.Value.containerTypeName; ins.keyTypeName = collEnu.Current.Value.keyTypeName; ins.valueTypeName = collEnu.Current.Value.valueTypeName; newCommand._genericMap.Add(collEnu.Current.Key, ins); } return(newCommand); } return(null); }
internal void DeserializeGenericData(ref NetworkState.NETWORK_STATE_TYPE state) { int genCount = BufferedNetworkUtilsClient.ReadInt(ref state); for (int i = 0; i < genCount; ++i) { string genName = BufferedNetworkUtilsClient.ReadString(ref state); string keyTypeName = BufferedNetworkUtilsClient.ReadString(ref state); string valueTypeName = BufferedNetworkUtilsClient.ReadString(ref state); string containerTypeName = BufferedNetworkUtilsClient.ReadString(ref state); System.Type valueType = System.Type.GetType(valueTypeName); System.Type keyType = System.Type.GetType(keyTypeName); genericData _data = new genericData(); _data.valueTypeName = valueTypeName; _data.containerTypeName = containerTypeName; int valueCount = BufferedNetworkUtilsClient.ReadInt(ref state); bool isStringK = false; bool isStringV = false; if (valueType != null && valueType.Equals(typeof(string))) { isStringV = true; } if (keyType != null && keyType.Equals(typeof(string))) { isStringK = true; } if (_data.containerTypeName == "dic") { for (int j = 0; j < valueCount; j = j + 2) { if (isStringK) { _data.valueData.Add(BufferedNetworkUtilsClient.ReadString(ref state)); } else if (keyType.IsEnum) { _data.valueData.Add(BufferedNetworkUtilsClient.ReadInt(ref state)); } else { _data.valueData.Add(BufferedNetworkUtilsClient.ReadStruct(keyType, ref state)); } if (isStringV) { _data.valueData.Add(BufferedNetworkUtilsClient.ReadString(ref state)); } else if (valueType.IsEnum) { _data.valueData.Add(BufferedNetworkUtilsClient.ReadInt(ref state)); } else { _data.valueData.Add(BufferedNetworkUtilsClient.ReadStruct(valueType, ref state)); } } } else if (_data.containerTypeName == "queue" || _data.containerTypeName == "list" || _data.containerTypeName == "stack") { for (int j = 0; j < valueCount; ++j) { if (isStringV) { _data.valueData.Add(BufferedNetworkUtilsClient.ReadString(ref state)); } else if (valueType.IsEnum) { _data.valueData.Add(BufferedNetworkUtilsClient.ReadInt(ref state)); } else { _data.valueData.Add(BufferedNetworkUtilsClient.ReadStruct(valueType, ref state)); } } } _genericMap.Add(genName, _data); } }
internal void SerializeGenericData() { var enu = _genericMap.GetEnumerator(); BufferedNetworkUtilsServer.SendInt(_genericMap.Count); while (enu.MoveNext()) { BufferedNetworkUtilsServer.SendString(enu.Current.Key); genericData _data = enu.Current.Value; BufferedNetworkUtilsServer.SendString(_data.keyTypeName); BufferedNetworkUtilsServer.SendString(_data.valueTypeName); BufferedNetworkUtilsServer.SendString(_data.containerTypeName); int count = _data.valueData.Count; BufferedNetworkUtilsServer.SendInt(count); bool isStringK = false; bool isStringV = false; System.Type typeK = System.Type.GetType(_data.keyTypeName); System.Type typeV = System.Type.GetType(_data.valueTypeName); if (typeV != null && typeV.Equals(typeof(string))) { isStringV = true; } if (typeK != null && typeK.Equals(typeof(string))) { isStringK = true; } if (_data.containerTypeName == "dic") { for (int i = 0; i < _data.valueData.Count; i = i + 2) { if (isStringK) { BufferedNetworkUtilsServer.SendString((string)_data.valueData[i]); } else if (typeK.IsEnum) { BufferedNetworkUtilsServer.SendInt(System.Convert.ToInt32(_data.valueData[i])); } else { BufferedNetworkUtilsServer.SendStruct(_data.valueData[i]); } if (isStringV) { BufferedNetworkUtilsServer.SendString((string)_data.valueData[i + 1]); } else if (typeV.IsEnum) { BufferedNetworkUtilsServer.SendInt(System.Convert.ToInt32(_data.valueData[i + 1])); } else { BufferedNetworkUtilsServer.SendStruct(_data.valueData[i + 1]); } } } else if (_data.containerTypeName == "queue" || _data.containerTypeName == "list" || _data.containerTypeName == "stack") { for (int i = 0; i < _data.valueData.Count; ++i) { if (isStringV) { BufferedNetworkUtilsServer.SendString((string)_data.valueData[i]); } else if (typeV.IsEnum) { BufferedNetworkUtilsServer.SendInt(System.Convert.ToInt32(_data.valueData[i])); } else { BufferedNetworkUtilsServer.SendStruct(_data.valueData[i]); } } } } }