public async UniTask CreateKey(byte[] buffer, UdpClient udpSocket ,SocketUdp socketUdp) { var publicKey = RSAPublicKey.Deserialize(buffer); RSA = new RSA(); var key = RSA.CreateKey(publicKey.Modules, publicKey.Exponent); AESKey = key.aeskey; Command obj = new Command { P2PEventType = CommandType.AcceptKey, Value = key.encrypted, }; var array = new Command[1]; array[0] = obj; var l2 = new UdpPacketL2 { Commands = array, PacketNumber = 0, ACKNumber = 0, }.Serialize(); var buf = new UdpPacket { PeerID = UniP2PManager.MyPeerID, UdpPacketL2 = l2, UdpPacketL2IV = null }.Serialize(); await udpSocket.SendAsync(buf, buf.Length, Peer.IPEndPoint); PacketCapture.Write(Peer.IPEndPoint.ToString(), buf.Length, "CreateKey"); State = UdpConnectionState.Connected; Peer.State = PeerState.Connected; InitHeartBeatAsync(socketUdp); }
public async UniTask RequestKey(UdpClient UdpSocket) { State = UdpConnectionState.KeyExchange; RSA = new RSA(); var publickey = RSA.RequestKey(); Command obj = new Command { P2PEventType = CommandType.RequestKey, Value = publickey.Serialize(), }; var array = new Command[1]; array[0] = obj; var l2 = new UdpPacketL2 { Commands = array, PacketNumber = 0, ACKNumber = 0, }.Serialize(); var buf = new UdpPacket { PeerID = UniP2PManager.MyPeerID, UdpPacketL2 = l2, UdpPacketL2IV = null }.Serialize(); await UdpSocket.SendAsync(buf, buf.Length, Peer.IPEndPoint); PacketCapture.Write(Peer.IPEndPoint.ToString(),buf.Length, "RequestKey"); }
public void AcceptKey(byte[] buffer, SocketUdp socketUdp) { AESKey = RSA.AcceptKey(buffer); State = UdpConnectionState.Connected; Peer.State = PeerState.Connected; InitHeartBeatAsync(socketUdp); }
internal UdpConnection(UdpSocket s, UdpConnectionMode m, UdpEndPoint ep) { socket = s; mode = m; endpoint = ep; stats = new UdpStats(); networkRtt = socket.Config.DefaultNetworkPing; aliasedRtt = socket.Config.DefaultAliasedPing; mtu = socket.Config.PacketSize; alwaysSendMtu = socket.Config.DefaultAlwaysSendMtu; state = UdpConnectionState.Connecting; recvTime = socket.GetCurrentTime(); sendTime = recvTime; sendWindow = new UdpRingBuffer <UdpHandle>(socket.Config.PacketWindow); this.networkPingFilterRttValues = new uint[socket.Config.NetworkPingMedianFilterSize]; this.networkPingFilterSortedIndices = new int[socket.Config.NetworkPingMedianFilterSize]; for (int i = 0; i < this.networkPingFilterSortedIndices.Length; ++i) { this.networkPingFilterSortedIndices[i] = i; } networkPingFilterNextIndexToReplace = 0; serializer = socket.CreateSerializer(); serializer.Connection = this; }
public void DisConnect() { isTickReliablePacket = false; UnreliableCommandBuffer.Clear(); ReliableCommandBuffer.Clear(); SentReliableBuffer.Clear(); State = UdpConnectionState.DisConnect; }
void OnStateConnected(UdpConnectionState oldState) { if (oldState == UdpConnectionState.Connecting) { if (IsServer) { SendCommand(UdpCommandType.Accepted); } socket.Raise(UdpEvent.PUBLIC_CONNECTED, this); } }
void OnStateConnected(UdpConnectionState oldState) { if (oldState == UdpConnectionState.Connecting) { UdpLog.Info("connected to {0} ({1})", endpoint.ToString(), mode); if (IsServer) { SendCommand(UdpCommandType.Accepted); } socket.Raise(UdpEvent.PUBLIC_CONNECTED, this); } }
internal UdpConnection(UdpSocket sock, UdpConnectionMode m, UdpEndPoint ep) { socket = sock; mode = m; endpoint = ep; networkRtt = socket.Config.DefaultNetworkPing; aliasedRtt = socket.Config.DefaultAliasedPing; mtu = sock.Config.DefaultMtu; alwaysSendMtu = sock.Config.DefaultAlwaysSendMtu; serializer = sock.CreateSerializer(); state = UdpConnectionState.Connecting; recvTime = socket.GetCurrentTime(); sendTime = recvTime; stats = new UdpConnectionStats(); sendWindow = new UdpRingBuffer <UdpHandle>(sock.Config.PacketWindow); }
void OnStateDisconnected(UdpConnectionState oldState) { if (oldState == UdpConnectionState.Connected) { while (sendWindow.Empty == false) { UdpHandle handle = sendWindow.Dequeue(); if (handle.IsObject) { socket.Raise(UdpEvent.PUBLIC_OBJECT_LOST, this, handle.Object); } } socket.Raise(UdpEvent.PUBLIC_DISCONNECTED, this); } }
internal void ChangeState(UdpConnectionState newState) { if (newState == state) { return; } UdpConnectionState oldState = state; switch (state = newState) { case UdpConnectionState.Connected: OnStateConnected(oldState); break; case UdpConnectionState.Disconnected: OnStateDisconnected(oldState); break; } }
public UdpConnection(Peer peer) { Peer = peer; State = UdpConnectionState.RequestSend; }
internal bool CheckState(UdpConnectionState stateValue) { return(state == stateValue); }
internal UdpConnection(UdpSocket sock, UdpConnectionMode m, UdpEndPoint ep) { socket = sock; mode = m; endpoint = ep; networkRtt = socket.Config.DefaultNetworkPing; aliasedRtt = socket.Config.DefaultAliasedPing; mtu = sock.Config.DefaultMtu; alwaysSendMtu = sock.Config.DefaultAlwaysSendMtu; serializer = sock.CreateSerializer(); state = UdpConnectionState.Connecting; recvTime = socket.GetCurrentTime(); sendTime = recvTime; stats = new UdpConnectionStats(); sendWindow = new UdpRingBuffer<UdpHandle>(sock.Config.PacketWindow); }
internal bool CheckState(UdpConnectionState stateValue) { return state == stateValue; }
internal void ChangeState(UdpConnectionState newState) { if (newState == state) return; UdpConnectionState oldState = state; switch (state = newState) { case UdpConnectionState.Connected: OnStateConnected(oldState); break; case UdpConnectionState.Disconnected: OnStateDisconnected(oldState); break; } }
internal UdpConnection(UdpSocket s, UdpConnectionMode m, UdpEndPoint ep) { socket = s; mode = m; endpoint = ep; stats = new UdpStats(); networkRtt = socket.Config.DefaultNetworkPing; aliasedRtt = socket.Config.DefaultAliasedPing; mtu = socket.Config.PacketSize; alwaysSendMtu = socket.Config.DefaultAlwaysSendMtu; state = UdpConnectionState.Connecting; recvTime = socket.GetCurrentTime(); sendTime = recvTime; sendWindow = new UdpRingBuffer<UdpHandle>(socket.Config.PacketWindow); this.networkPingFilterRttValues = new uint[socket.Config.NetworkPingMedianFilterSize]; this.networkPingFilterSortedIndices = new int[socket.Config.NetworkPingMedianFilterSize]; for (int i = 0; i < this.networkPingFilterSortedIndices.Length; ++i) { this.networkPingFilterSortedIndices[i] = i; } networkPingFilterNextIndexToReplace = 0; serializer = socket.CreateSerializer(); serializer.Connection = this; }