public override TsField GetTsField(NetField netField) { var f = base.GetTsField(netField); var isTypeValueType = csValueTypes.Contains(netField.FieldType.Name); var isTypeNullable = netField.FieldType.IsNullable; var isModelRequired = netField.Attributes.Any(a => a.Contains("Required")); //if it's a value type then we will always require it //if it's a nullable then we will always make it optional //otherwise, if it's model required then it will be required //otherwise, it's probably a reference type and will be optional if (isTypeNullable) { f.IsNullable = true; } else if (isModelRequired) { f.IsNullable = false; } else if (isTypeValueType) { f.IsNullable = false; } else { f.IsNullable = true; } return(f); }
int[] BytesAlignment(NetField nf, int index) { int[] message = new int[2]; int _nComboByteLength = 0; int byteFieldConunt = index + 1; if (nf.length % 4 != 0) { for (int b = index + 1; b < _strlFieldWrite.Count; b++) { if (_strlFieldWrite[b].type.ToUpper().Contains("BYTE")) { _nComboByteLength += _strlFieldWrite[b].length; byteFieldConunt = b + 1; _strlFieldWrite[b]._bCanSkip = true; } else { break; } } int temp = nf.length + _nComboByteLength; message[0] = byteFieldConunt; message[1] = 4 - (temp % 4); } return(message); }
public void TestIsTransientUnderstandsCustomTransient() { AssertIsNotTransient("CustomTransientField"); AssertIsNotTransient("FieldWithCustomAttribute"); NetField.MarkTransient(typeof(CustomTransientAttribute)); AssertIsTransient("CustomTransientField"); AssertIsNotTransient("FieldWithCustomAttribute"); }
public virtual TsField GetTsField(NetField netField) { return(new TsField { Name = GetTsName(netField.Name), FieldType = GetTsType(netField.FieldType), IsNullable = netField.FieldType.IsNullable, IsPublic = netField.IsPublic }); }
public ClientStaticMember(int typeIndex, NetField netField, bool isEditable, IUnityData unityData) { this.declaringTypeIndex = typeIndex; this.fieldType = netField.fieldType; this.name = netField.name; this.value = netField.value; this.isEditable = isEditable; this.drawer = TypeHandlerDrawersManager.CreateTypeHandlerDrawer(netField.handler, this.fieldType); this.dataDrawer = new DataDrawer(unityData); }
public static bool IsUserField(FieldInfo field) { if (field.IsStatic) { return(false); } if (NetField.IsTransient(field)) { return(false); } if (field.Name.IndexOf("$") != -1) { return(false); } return(true); }
public ClientField(ClientComponent behaviour, int fieldIndex, NetField netField, IUnityData unityData) { this.unityData = unityData; this.parentBehaviour = behaviour; this.fieldIndex = fieldIndex; this.fieldType = netField.fieldType ?? TypeHandlersManager.GetClientType(netField.handler != null ? netField.handler.type : null, netField.typeSignature); this.name = netField.name; this.isPublic = netField.isPublic; this.typeSignature = netField.typeSignature; this.value = netField.value; this.drawer = TypeHandlerDrawersManager.CreateTypeHandlerDrawer(netField.handler, this.fieldType); this.dataDrawer = new DataDrawer(this.unityData); }
public virtual string WriteField(NetField netField) { var modStr = (netField is NetFieldDeclaration) ? GetFieldDeclarationTypeString(((NetFieldDeclaration)netField).FieldDeclarationType) + " " : ""; var isPublic = netField.IsPublic ? "public " : ""; var staticStr = netField.IsStatic ? "static " : ""; var nullableStr = netField.FieldType.IsNullable ? "?" : ""; var defaultValue = netField.DefaultValue; if (string.IsNullOrWhiteSpace(defaultValue)) { defaultValue = ""; } else { defaultValue = " = " + defaultValue + ""; } return($"{isPublic}{modStr}{staticStr}{WriteTypeName(netField.FieldType)}{nullableStr} {netField.Name}{defaultValue}"); }
private static bool IsTransient(string name) { return(NetField.IsTransient(typeof(Item).GetField(name))); }
public void SetUp() { NetField.ResetTransientMarkers(); }
public static void InitNetFiled() { PlayerStateFields = new NetField[30]; PlayerStateFields[idx] = new NetField("commandTime", GetFieldSize(), 32); PlayerStateFields[idx] = new NetField("pmType", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("bobCycle", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("pmFlags", GetFieldSize(), 16); PlayerStateFields[idx] = new NetField("pmTime", GetFieldSize(), -16); PlayerStateFields[idx] = new NetField("origin.x", GetFieldSize(), 32); //0 PlayerStateFields[idx] = new NetField("origin.y", GetFieldSize(), 32); PlayerStateFields[idx] = new NetField("origin.z", GetFieldSize(), 32); //1 PlayerStateFields[idx] = new NetField("velocity.x", GetFieldSize(), 32); //2 PlayerStateFields[idx] = new NetField("velocity.y", GetFieldSize(), 32); //5 PlayerStateFields[idx] = new NetField("velocity.z", GetFieldSize(), 32); //3 PlayerStateFields[idx] = new NetField("gravity", GetFieldSize(), 16); //4 PlayerStateFields[idx] = new NetField("speed", GetFieldSize(), 16); //7 PlayerStateFields[idx] = new NetField("deltaAngles.x", GetFieldSize(), 32); PlayerStateFields[idx] = new NetField("deltaAngles.y", GetFieldSize(), 32); PlayerStateFields[idx] = new NetField("deltaAngles.z", GetFieldSize(), 32); PlayerStateFields[idx] = new NetField("groundEntityNum", GetFieldSize(), CConstVar.GENTITYNUM_BITS); //8 PlayerStateFields[idx] = new NetField("entityID", GetFieldSize(), 0); //6 PlayerStateFields[idx] = new NetField("movementDir", GetFieldSize(), 4); PlayerStateFields[idx] = new NetField("entityFlags", GetFieldSize(), 16); PlayerStateFields[idx] = new NetField("eventSequence", GetFieldSize(), 16); PlayerStateFields[idx] = new NetField("events.0", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("events.1", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("eventParams.0", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("eventParams.1", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("externalEvent", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("externalEventParam", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("externalEventTime", GetFieldSize(), -16); PlayerStateFields[idx] = new NetField("clientNum", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("viewangles.x", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("viewangles.y", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("viewangles.z", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("viewHeight", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("damageEvent", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("damageCount", GetFieldSize(), 8); PlayerStateFields[idx] = new NetField("states.0", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.1", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.2", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.3", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.4", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.5", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.6", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.7", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.8", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.9", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.10", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.11", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.12", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.13", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.14", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("states.15", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.0", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.1", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.2", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.3", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.4", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.5", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.6", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.7", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.8", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.9", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.10", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.11", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.12", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.13", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.14", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("persistant.15", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("ping", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("pm_framecount", GetFieldSize(), 0); PlayerStateFields[idx] = new NetField("entityEventSequence", GetFieldSize(), 0); var tmps = new string[] { "commandTime", "origin.x", "origin.y", "bobCycle", "velocity.x", "velocity.y", "viewangles.y", "viewangles.x", "origin.z", "velocity.z", "pmTime", "eventSequence", "movementDir", "events[0]", "pmFlags", "groundEntityNum", "entityFlags", "externalEvent", "gravity", "speed", "deltaAngles.y", "externalEventParam", "viewHeight", "damageEvent", "damageCount", "pmType", "deltaAngles.x", "deltaAngles.z", "eventParams.0", "eventParams.1", "clientNum", "viewangles.z", }; System.Array.Sort(PlayerStateFields, (x1, x2) => { var i1 = System.Array.IndexOf(tmps, x1.name); var i2 = System.Array.IndexOf(tmps, x2.name); if (i1 < 0 && i2 < 0) { // CLog.Error("playerStateFields sort failed"); return(0); } else if (i1 < 0) { return(1); } else if (i2 < 0) { return(-1); } return(i1 - i2); }); }
private void OnGUI() { EditorGUILayout.BeginVertical(); _nCreateTypeIndex = EditorGUILayout.Popup("Choose The Type", _nCreateTypeIndex, createTypeArray); if (lastIndex != _nCreateTypeIndex) { _nTypeIndex = 0; } lastIndex = _nCreateTypeIndex; _strNameSpace = EditorGUILayout.TextField("Please Input NameSpaceName", _strNameSpace); fileName = EditorGUILayout.TextField("Please Input FileName", fileName); _nMainID = EditorGUILayout.IntField("MainID", _nMainID); _nSubID = EditorGUILayout.IntField("SubID", _nSubID); if (_strlFieldWrite.Count != 0) { EditorGUILayout.BeginVertical(); for (int i = 0; i < _strlFieldWrite.Count; i++) { EditorGUILayout.BeginHorizontal(); string s = ""; if (_strlFieldWrite[i].type == "string" || _strlFieldWrite[i].type.Contains("[]")) { s = _strlFieldWrite[i].type + " " + _strlFieldWrite[i].name + " //" + _strlFieldWrite[i].note + " Length:" + _strlFieldWrite[i].length; } else { s = _strlFieldWrite[i].type + " " + _strlFieldWrite[i].name + " //" + _strlFieldWrite[i].note; } EditorGUILayout.LabelField(s, GUILayout.Width(300)); if (GUILayout.Button("Remove This Field")) { _strlFieldWrite.Remove(_strlFieldWrite[i]); StringClear(); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); } EditorGUILayout.BeginHorizontal(); if (_nCreateTypeIndex == 0) { _nTypeIndex = EditorGUILayout.Popup(_nTypeIndex, _strArTypeNameReq, GUILayout.Width(50)); fieldName = EditorGUILayout.TextField(fieldName, GUILayout.Width(100)); _strNote = EditorGUILayout.TextField("Note", _strNote); if (_strArTypeNameReq[_nTypeIndex] == "string" || _strArTypeNameReq[_nTypeIndex].Contains("[]")) { _nLength = EditorGUILayout.IntField("Length", _nLength); } } else { _nTypeIndex = EditorGUILayout.Popup(_nTypeIndex, _strArTypeNameResp, GUILayout.Width(50)); fieldName = EditorGUILayout.TextField(fieldName, GUILayout.Width(100)); _strNote = EditorGUILayout.TextField("Note", _strNote); if (_strArTypeNameResp[_nTypeIndex] == "string" || _strArTypeNameResp[_nTypeIndex].Contains("[]")) { _nLength = EditorGUILayout.IntField("Length", _nLength); } } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(); if (GUILayout.Button("Add New Field")) { NetField nf = new NetField(); if (_nCreateTypeIndex == 0) { nf.type = _strArTypeNameReq[_nTypeIndex]; } else { nf.type = _strArTypeNameResp[_nTypeIndex]; } nf.name = fieldName; nf.note = _strNote; if (nf.type == "string" || nf.type.Contains("[]")) { nf.length = _nLength; } else { nf.length = -1; switch (nf.type) { case "short": nf.length = 2; break; case "ushort": nf.length = 2; break; case "double": nf.length = 8; break; case "byte": nf.length = 1; break; case "bool": nf.length = 1; break; } if (nf.length == -1) { nf.length = 4; } } nf._bCanSkip = false; _strlFieldWrite.Add(nf); StringClear(); } if (_strlFieldWrite.Count > 0) { if (GUILayout.Button("Create New CS File")) { if (_nCreateTypeIndex == 0) { CreateReqCsFile(); _nMainID = 0; _nSubID = 0; totalLength = 0; } else { CreateRespCsFile(); _nMainID = 0; _nSubID = 0; totalLength = 0; } AssetDatabase.Refresh(); } } EditorGUILayout.EndVertical(); EditorGUILayout.EndVertical(); }
private void CreateReqCsFile() { string path = EditorUtility.SaveFilePanel("Save The Msg CS", "", fileName + ".cs", "cs"); StreamWriter sw = new StreamWriter(path, false); Write(sw, 0, "using UnityEngine;"); Write(sw, 0, "using System.Collections;"); Write(sw, 0, "using KK.Frame.Net;"); Write(sw, 0, ""); Write(sw, 0, "namespace " + _strNameSpace); Write(sw, 0, "{"); Write(sw, 1, "[ProtoNetMsg(mainID = " + _nMainID + ", " + "subID = " + _nSubID + ", " + "msgTyp = ProtoNetMsgAttribute.MsgType.Req)]"); Write(sw, 1, string.Format("public class {0} : CMD_Base_Req", fileName)); Write(sw, 1, "{"); Write(sw, 2, "public override short MainId { get { return " + _nMainID + "; }}"); Write(sw, 2, "public override short SubId { get { return " + _nSubID + "; }}"); Write(sw, 0, ""); Write(sw, 2, "// 消息字段///"); Write(sw, 0, ""); for (int i = 0; i < _strlFieldWrite.Count; i++) { string s = "public " + _strlFieldWrite[i].type + " " + _strlFieldWrite[i].name + "; //" + _strlFieldWrite[i].note; Write(sw, 2, s); } Write(sw, 0, ""); Write(sw, 2, "protected override void WriteData(ByteBuffer buffer)"); Write(sw, 2, "{"); int totalAlignment = 0; int differ = 0; int writeIndex = 999; bool _bIsAddToEnd = false; for (int i = 0; i < _strlFieldWrite.Count; i++) { NetField nf = _strlFieldWrite[i]; string s = nf.type; if (s == "string" || s.Contains("[]")) { string temp = s.Substring(0, 1).ToUpper(); temp += s.Substring(1, s.Length - 1); string f = ""; if (!s.Contains("[]")) { f = "buffer.Write" + temp + "(" + "KKNetUtil.Get4scalPasswordCN(" + nf.name + "," + nf.length + "));"; } else { if (s == "byte[]") { string ft = temp.Replace("[]", "s"); f = "buffer.Write" + ft + "(" + nf.name + ");"; } else { string ft = temp.Replace("[]", "Array"); f = "buffer.Write" + ft + "(" + nf.name + ");"; } } if (i == writeIndex) { AutoWriteByte(sw, differ); totalAlignment += differ; } Write(sw, 3, f); } else { string temp = s.Substring(0, 1).ToUpper(); if (s == "ushort") { string temptwo = s.Substring(1, 1).ToUpper(); temp += temptwo; temp += s.Substring(2, s.Length - 2); } else { temp += s.Substring(1, s.Length - 1); } string f = "buffer.Write" + temp + "(" + nf.name + ");"; if (i == writeIndex) { AutoWriteByte(sw, differ); totalAlignment += differ; } Write(sw, 3, f); } if (nf._bCanSkip == false) { if (nf.length % 4 != 0) { int[] byteMessageArray = BytesAlignment(nf, i); writeIndex = byteMessageArray[0]; if (writeIndex >= _strlFieldWrite.Count) { _bIsAddToEnd = true; } differ = byteMessageArray[1]; } } } if (_bIsAddToEnd) { AutoWriteByte(sw, differ); totalAlignment += differ; } Write(sw, 2, "}"); Write(sw, 0, ""); Write(sw, 2, "protected override int GetDataSize()"); Write(sw, 2, "{"); for (int i = 0; i < _strlFieldWrite.Count; i++) { totalLength += _strlFieldWrite[i].length; } totalLength += totalAlignment; Write(sw, 3, "return NetDefine.HEAD_LEN + " + totalLength + ";"); Write(sw, 2, "}"); Write(sw, 2, "public static CMD_Base_Req CreateInstance()"); Write(sw, 2, "{"); Write(sw, 3, "return new " + fileName + "();"); Write(sw, 2, "}"); Write(sw, 1, "}"); Write(sw, 0, "}"); sw.Close(); _strlFieldWrite.Clear(); totalAlignment = 0; fileName = ""; fieldName = ""; _strNameSpace = ""; }
internal static void MarkTransient(String marker) { NetField.MarkTransient(marker); }
public static void InitNetField() { entityStateFields = new NetField[46]; //把经常改变的量放到前面 entityStateFields[0] = new NetField("id", 0, 32); entityStateFields[1] = new NetField("idx", sizeof(int), 32); entityStateFields[2] = new NetField("eType", sizeof(int) * 2, 8); entityStateFields[3] = new NetField("eFlag", sizeof(int) * 3, 32); entityStateFields[4] = new NetField("pos.trType", sizeof(int) * 4, 8); entityStateFields[5] = new NetField("pos.trTime", sizeof(int) * 5, 32); //0 entityStateFields[6] = new NetField("pos.trDur", sizeof(int) * 6, 32); entityStateFields[7] = new NetField("pos.trBase.x", sizeof(int) * 7, 0); //1 entityStateFields[8] = new NetField("pos.trBase.y", sizeof(int) * 8, 0); //2 entityStateFields[9] = new NetField("pos.trBase.z", sizeof(int) * 9, 0); //5 entityStateFields[10] = new NetField("pos.trDelta.x", sizeof(int) * 10, 0); //3 entityStateFields[11] = new NetField("pos.trDelta.y", sizeof(int) * 11, 0); //4 entityStateFields[12] = new NetField("pos.trDelta.z", sizeof(int) * 12, 0); //7 entityStateFields[13] = new NetField("apos.trType", sizeof(int) * 13, 8); entityStateFields[14] = new NetField("apos.trTime", sizeof(int) * 14, 32); entityStateFields[15] = new NetField("apos.trDur", sizeof(int) * 15, 32); entityStateFields[16] = new NetField("apos.trBase.x", sizeof(int) * 16, 0); //8 entityStateFields[17] = new NetField("apos.trBase.y", sizeof(int) * 17, 0); //6 entityStateFields[18] = new NetField("apos.trBase.z", sizeof(int) * 18, 0); entityStateFields[19] = new NetField("apos.trDelta.x", sizeof(int) * 19, 0); entityStateFields[20] = new NetField("apos.trDelta.y", sizeof(int) * 20, 0); entityStateFields[21] = new NetField("apos.trDelta.z", sizeof(int) * 21, 0); entityStateFields[22] = new NetField("time", sizeof(int) * 22, 32); entityStateFields[23] = new NetField("time2", sizeof(int) * 23, 32); entityStateFields[24] = new NetField("origin.x", sizeof(int) * 24, 0); entityStateFields[25] = new NetField("origin.y", sizeof(int) * 25, 0); entityStateFields[26] = new NetField("origin.z", sizeof(int) * 26, 0); entityStateFields[27] = new NetField("origin2.x", sizeof(int) * 27, 0); entityStateFields[28] = new NetField("origin2.y", sizeof(int) * 28, 0); entityStateFields[29] = new NetField("origin2.z", sizeof(int) * 29, 0); entityStateFields[30] = new NetField("angles.x", sizeof(int) * 30, 0); entityStateFields[31] = new NetField("angles.y", sizeof(int) * 31, 0); entityStateFields[32] = new NetField("angles.z", sizeof(int) * 32, 0); entityStateFields[33] = new NetField("angles2.x", sizeof(int) * 33, 0); entityStateFields[34] = new NetField("angles2.y", sizeof(int) * 34, 0); entityStateFields[35] = new NetField("angles2.z", sizeof(int) * 35, 0); entityStateFields[36] = new NetField("oeIdx", sizeof(int) * 36, CConstVar.GENTITYNUM_BITS); entityStateFields[37] = new NetField("oeIdx2", sizeof(int) * 37, CConstVar.GENTITYNUM_BITS); entityStateFields[38] = new NetField("sourceID", sizeof(int) * 38, 32); entityStateFields[39] = new NetField("source2ID", sizeof(int) * 39, 32); entityStateFields[40] = new NetField("clientNum", sizeof(int) * 40, 8); entityStateFields[41] = new NetField("frame", sizeof(int) * 41, 32); entityStateFields[42] = new NetField("solid", sizeof(int) * 42, 32); entityStateFields[43] = new NetField("eventID", sizeof(int) * 43, 32); entityStateFields[44] = new NetField("eventParam", sizeof(int) * 44, 32); entityStateFields[45] = new NetField("generic1", sizeof(int) * 45, 8); var tmps = new string[] { "pos.trTime", "pos.trBase.x", "pos.trBase.y", "pos.trDelta.x", "pos.trDelta.y", "pos.trBase.z", "apos.trBase.y", "pos.trDelta.z", "apos.trBase.x", "eventID", "angles2.y", "eType", "eventParam", "pos.trType", "eFlag", "oeIdx", "clientNum", "angles.y", "pos.trDur", "apos.trType", "origin.x", "origin.y", "origin.z", "solid", "sourceID", "oeIdx2", "generic1", "origin2.z", "origin2.x", "origin2.y", "source2ID", "angles.x", "time", "apos.trTime", "apos.trDur", "apos.trBase.z", "apos.trDelta.x", "apos.trDelta.y", "apos.trDelta.z", "time2", "angles.z", "angles2.x", "angles2.z", "frame", "id", "idx", }; Array.Sort(entityStateFields, (x1, x2) => { var i1 = Array.IndexOf(tmps, x1.name); var i2 = Array.IndexOf(tmps, x2.name); if (i1 < 0 || i2 < 0) { CLog.Error("entityStateFields sort failed"); return(0); } return(i1 - i2); }); }
private void ConnectField(NetType type, NetField field, IGraphDatabaseTransaction tx) { tx.CreateRelationship(type, field, Relationship.DEFINES_FIELD); tx.CreateRelationship(field, field.Type, Relationship.HAS_TYPE); }