internal void SendWelcomePacket(KNetConnection newClient) { object[] welcomePacket = new object[2]; string[] viewTypeNames = new string[KlivenNet.Views.Count]; int[] viewIds = new int[KlivenNet.Views.Count]; // byte[][] viewOwnersData = new byte[KlivenNet.Views.Count][]; for (int i = 0; i < KlivenNet.Views.Count; i++) { var view = KlivenNet.Views[i]; viewTypeNames[i] = view.GetType().FullName; viewIds[i] = view.Id; // viewOwnersData[i] = view.Owner.KNetSerializeReference(); } // welcomePacket[0] = KlivenNet.NextPlayerId; welcomePacket[0] = viewTypeNames; welcomePacket[1] = viewIds; // welcomePacket[2] = viewOwnersData; MemoryStream ms = new MemoryStream(); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(ms, welcomePacket); var packet = KNetUtils.ConstructPacket(KNetUtils.PacketType.welcome, ms.GetBuffer()); SendBytes(newClient, packet); SendBufferedValues(newClient); /*KlivenNet.ZeroView.RPC("JebnijSobie", newClient, "monsterka kurwa", new int[] { 1, 2, 3 }, new KNetPlayer(), 2137); * KlivenNet.ZeroView.RPC("JebnijSobie", newClient, "monsterka kurwa2", new int[] { 3, 21, 3222 }, new KNetPlayer(), 2167);*/ KlivenNet.ZeroView.RPC("ZaszczekajPajacu", new KNetConnection[] { newClient }, "paulina"); }
//public static List<KNetSerializedField> DEBUG_SEND_BUFFERED_VALUES() { // return SendBufferedValues(); //} internal void SendBufferedValues(KNetConnection newClient) { //List<KNetSerializedField> serializedFields = new List<KNetSerializedField>(); foreach (var view in KlivenNet.Views) { int buffFieldId = -1; foreach (var bufferedField in view.BufferedFields) { buffFieldId++; var fieldType = bufferedField.FieldType; var bufferable = KNetUtils.IsSerializable(fieldType); if (bufferable == SerializableType.nonSerializable) { KNetLogger.LogError($"KNetServer: could not serialize field {bufferedField.Name} on KNetView {view.Id}: does {bufferedField.DeclaringType.Name} implement KNetSerializable interface?"); continue; } // Console.WriteLine(bufferedField.Name + " is bufferable: " + bufferable); var bytes = KNetUtils.Serialize(bufferedField.GetValue(view), bufferable, out int count); if (bytes == null) { continue; } var serializedField = new KNetSerializedField(view.Id, buffFieldId, bytes); serializedField.count = count; var packet = KNetUtils.ConstructPacket(KNetUtils.PacketType.bufferedObject, serializedField); SendBytes(newClient, packet); } } }
public KNetPlayer() { Connection = new KNetConnection(); }
public KNetPlayer(KNetConnection connection) { Connection = connection; // Name = name; }
internal static byte[] ConstructPacket(PacketType packetType, byte[] bytes, KNetConnection overrideSender = null) { var connIdBytes = BytesFromShort(overrideSender != null && KlivenNet.IsServer ? overrideSender.Id : KlivenNet.MyConnection.Id); return(LZ4Codec.Wrap(new byte[] { (byte)packetType, (byte)PacketDataType.bytes, connIdBytes[0], connIdBytes[1] }.Concat(bytes).ToArray())); }
internal void SendBytesInternal(KNetConnection target, byte[] bytes) { SendBytes(target, bytes); }
/// <summary> /// Sends bytes to targeted Client. Write your own code that manages that. /// </summary> /// <param name="target">Targeted Client</param> /// <param name="bytes">Data to send</param> protected abstract void SendBytes(KNetConnection target, byte[] bytes);
protected virtual void OnClientConnected(KNetConnection newClient) { // we have to send welcome packet to the client. SendWelcomePacket(newClient); }