Beispiel #1
0
 public override void StopListen()
 {
     NetworkTransport.RemoveHost(this._hostID);
     this._peerID = 0;
     this._state  = MPPeer.PeerState.Inited;
     this.ResetServerData();
 }
Beispiel #2
0
        public override void Listen(int serverPort = 0, string ipAddress = null)
        {
            NetPeerConfiguration config = new NetPeerConfiguration("ng")
            {
                AutoFlushSendQueue = true
            };

            config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
            if (serverPort != 0)
            {
                config.Port = serverPort;
            }
            if (ipAddress != null)
            {
                config.LocalAddress = IPAddress.Parse(ipAddress);
            }
            else if (ipAddress == null)
            {
                config.LocalAddress = IPAddress.Parse("0.0.0.0");
            }
            this._lidgrenServer = new NetServer(config);
            this._lidgrenPeer   = this._lidgrenServer;
            this._lidgrenServer.Start();
            this._peerID = 1;
            this._state  = MPPeer.PeerState.ServerListening;
        }
Beispiel #3
0
 public override void StopListen()
 {
     this._lidgrenServer.Shutdown("what?");
     this._peerID = 0;
     this._state  = MPPeer.PeerState.Inited;
     this.ResetServerData();
 }
Beispiel #4
0
 public override void Shutdown()
 {
     if (this._state > MPPeer.PeerState.Inited)
     {
         this._lidgrenPeer.Shutdown("BYE");
     }
     this.ResetServerData();
     this._state = MPPeer.PeerState.Unitialized;
 }
Beispiel #5
0
 public override void Shutdown()
 {
     if (this._state > MPPeer.PeerState.Inited)
     {
         NetworkTransport.RemoveHost(this._hostID);
     }
     NetworkTransport.Shutdown();
     this.ResetServerData();
     this._clientConnectState = ClientConnectState.Idle;
     this._state = MPPeer.PeerState.Unitialized;
 }
Beispiel #6
0
 public override void Init()
 {
     NetworkTransport.Init(this._globalConfig);
     this._state      = MPPeer.PeerState.Inited;
     this._selfConnID = -1;
     this._hostID     = -1;
     this._selfBuffer = new byte[0x10];
     this._serverConnectedPeerCount = 0;
     this._peerMap        = new int[7];
     this._totalPeerCount = 0;
     this.ResetServerData();
 }
Beispiel #7
0
 public override void ServerReady()
 {
     this._totalPeerCount = 1 + this._serverConnectedPeerCount;
     byte[] data = new byte[0x40];
     data[0] = base.PackHeader(7, 2);
     data[1] = (byte)this._totalPeerCount;
     this.SendByChannel(data, data.Length, this.reliableChannel, 0);
     this._state = MPPeer.PeerState.Established;
     if (base.onEstablished != null)
     {
         base.onEstablished();
     }
 }
Beispiel #8
0
 public override void ServerReady()
 {
     this._totalPeerCount = 1 + this._serverConnectedPeerCount;
     for (int i = 2; i <= (1 + this._serverConnectedPeerCount); i++)
     {
         this._selfBuffer[0] = base.PackHeader((byte)i, 2);
         this._selfBuffer[1] = (byte)this._totalPeerCount;
         this.SendTo(this._peerMap[i], 0, this._selfBuffer, 2);
     }
     this._state = MPPeer.PeerState.Established;
     if (base.onEstablished != null)
     {
         base.onEstablished();
     }
 }
Beispiel #9
0
        public override void Connect(string ipAddress, int serverPort)
        {
            NetPeerConfiguration config = new NetPeerConfiguration("ng")
            {
                AutoFlushSendQueue = true
            };

            this._lidgrenClient = new NetClient(config);
            this._lidgrenPeer   = this._lidgrenClient;
            this._lidgrenClient.Start();
            NetOutgoingMessage hailMessage = this._lidgrenClient.CreateMessage(8);

            hailMessage.Write("ng");
            this._lidgrenClient.Connect(ipAddress, serverPort, hailMessage);
            this._state = MPPeer.PeerState.ClientConnecting;
        }
Beispiel #10
0
 public override void Listen(int serverPort = 0, string ipAddress = null)
 {
     if ((ipAddress != null) && (serverPort != 0))
     {
         this._hostID = NetworkTransport.AddHost(this._ht, serverPort, ipAddress);
     }
     else if ((ipAddress == null) && (serverPort != 0))
     {
         this._hostID = NetworkTransport.AddHost(this._ht, serverPort);
     }
     else
     {
         this._hostID = NetworkTransport.AddHost(this._ht);
     }
     this._peerID = 1;
     this._state  = MPPeer.PeerState.ServerListening;
 }
Beispiel #11
0
        public override void Connect(string ipAddress, int serverPort)
        {
            byte num;

            if (this._isDelaySimulator)
            {
                this._hostID     = NetworkTransport.AddHostWithSimulator(this._ht, 0x3e8, 0x5dc);
                this._selfConnID = NetworkTransport.ConnectWithSimulator(this._hostID, ipAddress, serverPort, 0, out num, this._simulatorConfig);
            }
            else
            {
                this._hostID     = NetworkTransport.AddHost(this._ht);
                this._selfConnID = NetworkTransport.Connect(this._hostID, ipAddress, serverPort, 0, out num);
            }
            if (num != 0)
            {
                throw new UnityException("bad connection : " + ((NetworkError)num));
            }
            this._state = MPPeer.PeerState.ClientConnecting;
            this._clientConnectState = ClientConnectState.Idle;
        }
Beispiel #12
0
        public override void Core()
        {
            if (this._state > MPPeer.PeerState.Inited)
            {
                NetworkEventType dataEvent = NetworkEventType.DataEvent;
                while ((dataEvent != NetworkEventType.Nothing) && (this._state > MPPeer.PeerState.Inited))
                {
                    bool flag;
                    int  num2;
                    dataEvent = NetworkTransport.ReceiveFromHost(this._hostID, out this._recvConnID, out this._recvChannelID, this._recvBuffer, this._recvBuffer.Length, out this._recvDataSize, out this._recvErr);
                    if (this._state != MPPeer.PeerState.ServerListening)
                    {
                        goto Label_0167;
                    }
                    switch (dataEvent)
                    {
                    case NetworkEventType.DataEvent:
                    {
                        this.ServerDispatchDataEvent(dataEvent);
                        continue;
                    }

                    case NetworkEventType.ConnectEvent:
                    {
                        this.CheckNetError(this._recvErr, dataEvent);
                        this._serverConnectedPeerCount++;
                        byte index = (byte)(this._peerID + this._serverConnectedPeerCount);
                        this._peerMap[index] = this._recvConnID;
                        this._selfBuffer[0]  = base.PackHeader(index, 1);
                        this._selfBuffer[1]  = index;
                        this.SendTo(this._recvConnID, 0, this._selfBuffer, 2);
                        if (base.onConnected != null)
                        {
                            base.onConnected(index);
                        }
                        continue;
                    }

                    case NetworkEventType.DisconnectEvent:
                        flag = false;
                        num2 = 2;
                        goto Label_0143;

                    default:
                    {
                        continue;
                    }
                    }
Label_00F7:
                    if ((this._peerMap[num2] != -1) && (this._peerMap[num2] == this._recvConnID))
                    {
                        this._peerMap[num2] = -1;
                        if (base.onDisconnected != null)
                        {
                            base.onDisconnected(num2);
                        }
                        flag = true;
                        continue;
                    }
                    num2++;
Label_0143:
                    if (num2 <= (1 + this._serverConnectedPeerCount))
                    {
                        goto Label_00F7;
                    }
                    continue;
Label_0167:
                    if (this._state == MPPeer.PeerState.ClientConnecting)
                    {
                        if (this._clientConnectState == ClientConnectState.Idle)
                        {
                            if (dataEvent == NetworkEventType.ConnectEvent)
                            {
                                this.CheckNetError(this._recvErr, dataEvent);
                                this._clientConnectState = ClientConnectState.JustConnectedWaitingForSetClientID;
                            }
                            else if (dataEvent == NetworkEventType.DataEvent)
                            {
                                Debug.LogError("not expecting data event before peer ID is set");
                            }
                        }
                        else if ((this._clientConnectState == ClientConnectState.JustConnectedWaitingForSetClientID) && (dataEvent == NetworkEventType.DataEvent))
                        {
                            this.CheckNetError(this._recvErr, dataEvent);
                            int num3 = base.ParseMessageType(this._recvBuffer);
                            int num4 = base.ParsePeerID(this._recvBuffer);
                            this._peerID             = num4;
                            this._state              = MPPeer.PeerState.ClientConnected;
                            this._clientConnectState = ClientConnectState.ConnectedAndGotClientID;
                            if (base.onConnected != null)
                            {
                                base.onConnected(this._selfConnID);
                            }
                        }
                    }
                    else
                    {
                        if (this._state != MPPeer.PeerState.ClientConnected)
                        {
                            goto Label_02FE;
                        }
                        switch (dataEvent)
                        {
                        case NetworkEventType.DataEvent:
                        {
                            int num5 = base.ParseMessageType(this._recvBuffer);
                            this.CheckNetError(this._recvErr, dataEvent);
                            if (num5 != 2)
                            {
                                goto Label_02C7;
                            }
                            this._totalPeerCount = this._recvBuffer[1];
                            this._state          = MPPeer.PeerState.Established;
                            if (base.onEstablished != null)
                            {
                                base.onEstablished();
                            }
                            break;
                        }

                        case NetworkEventType.DisconnectEvent:
                            if (base.onDisconnected != null)
                            {
                                base.onDisconnected(this._selfConnID);
                            }
                            this._state = MPPeer.PeerState.ClientDropped;
                            break;
                        }
                    }
                    continue;
Label_02C7:
                    if (base.onPacket != null)
                    {
                        base.onPacket(this._recvBuffer, this._recvDataSize - 1, 1, this._recvChannelID % 2);
                    }
                    continue;
Label_02FE:
                    if (this._state == MPPeer.PeerState.Established)
                    {
                        if (this.isServer)
                        {
                            switch (dataEvent)
                            {
                            case NetworkEventType.DataEvent:
                            {
                                this.ServerDispatchDataEvent(dataEvent);
                                continue;
                            }

                            case NetworkEventType.Nothing:
                            {
                                continue;
                            }
                            }
                            continue;
                        }
                        switch (dataEvent)
                        {
                        case NetworkEventType.DataEvent:
                        {
                            this.CheckNetError(this._recvErr, dataEvent);
                            if (base.onPacket != null)
                            {
                                base.onPacket(this._recvBuffer, this._recvDataSize - 1, 1, this._recvChannelID % 2);
                            }
                            continue;
                        }

                        case NetworkEventType.Nothing:
                        {
                            continue;
                        }
                        }
                    }
                }
            }
        }
Beispiel #13
0
        public override void Core()
        {
            if (this._state > MPPeer.PeerState.Inited)
            {
                NetIncomingMessage message;
                while ((message = this._lidgrenPeer.ReadMessage()) != null)
                {
                    byte num;
                    int  num2;
                    NetConnectionStatus status;
                    bool flag;
                    int  num3;
                    NetIncomingMessageType messageType = message.MessageType;
                    switch (messageType)
                    {
                    case NetIncomingMessageType.VerboseDebugMessage:
                    case NetIncomingMessageType.DebugMessage:
                    case NetIncomingMessageType.WarningMessage:
                    case NetIncomingMessageType.ErrorMessage:
                        Debug.LogError(message.ReadString());
                        break;
                    }
                    if (this._state != MPPeer.PeerState.ServerListening)
                    {
                        goto Label_024D;
                    }
                    messageType = message.MessageType;
                    switch (messageType)
                    {
                    case NetIncomingMessageType.StatusChanged:
                        status = (NetConnectionStatus)message.ReadByte();
                        Debug.Log(message.ReadString());
                        if (status != NetConnectionStatus.Disconnected)
                        {
                            goto Label_01C2;
                        }
                        flag = false;
                        num3 = 2;
                        goto Label_01AE;

                    case NetIncomingMessageType.ConnectionApproval:
                        if (!(message.ReadString() == "ng"))
                        {
                            goto Label_0130;
                        }
                        num  = 0;
                        num2 = 2;
                        goto Label_00D2;

                    case NetIncomingMessageType.Data:
                        this.ServerDispatchDataEvent(message);
                        goto Label_0498;

                    default:
                        goto Label_0498;
                    }
Label_00B9:
                    if (this._peerMap[num2] == null)
                    {
                        num = (byte)num2;
                        goto Label_00E0;
                    }
                    num2++;
Label_00D2:
                    if (num2 < this._peerMap.Length)
                    {
                        goto Label_00B9;
                    }
Label_00E0:
                    this._peerMap[num] = message.SenderConnection;
                    NetOutgoingMessage localHail = this._lidgrenPeer.CreateMessage();
                    localHail.Data[0]     = base.PackHeader(num, 1);
                    localHail.Data[1]     = num;
                    localHail.LengthBytes = 2;
                    message.SenderConnection.Approve(localHail);
                    goto Label_0498;
Label_0130:
                    message.SenderConnection.Deny();
                    goto Label_0498;
Label_016A:
                    if (this._peerMap[num3].RemoteUniqueIdentifier == message.SenderConnection.RemoteUniqueIdentifier)
                    {
                        flag = true;
                        this._peerMap[num3] = null;
                        this._serverConnectedPeerCount--;
                        goto Label_0498;
                    }
                    num3++;
Label_01AE:
                    if (num3 < this._peerMap.Length)
                    {
                        goto Label_016A;
                    }
                    goto Label_0498;
Label_01C2:
                    if (status == NetConnectionStatus.Connected)
                    {
                        int connID = 0;
                        for (int i = 2; i < this._peerMap.Length; i++)
                        {
                            if (this._peerMap[i].RemoteUniqueIdentifier == message.SenderConnection.RemoteUniqueIdentifier)
                            {
                                connID = i;
                                break;
                            }
                        }
                        this._serverConnectedPeerCount++;
                        if (base.onConnected != null)
                        {
                            base.onConnected(connID);
                        }
                    }
                    goto Label_0498;
Label_024D:
                    if (this._state == MPPeer.PeerState.ClientConnecting)
                    {
                        if (message.MessageType == NetIncomingMessageType.StatusChanged)
                        {
                            NetConnectionStatus status2 = (NetConnectionStatus)message.ReadByte();
                            string str3 = message.ReadString();
                            Debug.Log(string.Format("{0}, {1}", status2, str3));
                            if (status2 == NetConnectionStatus.Connected)
                            {
                                NetIncomingMessage remoteHailMessage = message.SenderConnection.RemoteHailMessage;
                                int num6 = base.ParsePeerID(remoteHailMessage.Data);
                                int num7 = base.ParseMessageType(remoteHailMessage.Data);
                                int num8 = remoteHailMessage.Data[1];
                                this._peerID = num6;
                                this._state  = MPPeer.PeerState.ClientConnected;
                                if (base.onConnected != null)
                                {
                                    base.onConnected(this._peerID);
                                }
                            }
                        }
                        else if (message.MessageType != NetIncomingMessageType.Data)
                        {
                        }
                    }
                    else
                    {
                        if (this._state != MPPeer.PeerState.ClientConnected)
                        {
                            goto Label_03F7;
                        }
                        messageType = message.MessageType;
                        if (messageType == NetIncomingMessageType.StatusChanged)
                        {
                            NetConnectionStatus status3 = (NetConnectionStatus)message.ReadByte();
                            Debug.Log(message.ReadString());
                            if (status3 == NetConnectionStatus.Disconnected)
                            {
                                if (base.onDisconnected != null)
                                {
                                    base.onDisconnected(this._peerID);
                                }
                                this._state = MPPeer.PeerState.ClientDropped;
                            }
                        }
                        else if (messageType == NetIncomingMessageType.Data)
                        {
                            goto Label_037C;
                        }
                    }
                    goto Label_0498;
Label_037C:
                    if (base.ParseMessageType(message.Data) == 2)
                    {
                        this._totalPeerCount = message.Data[1];
                        this._state          = MPPeer.PeerState.Established;
                        if (base.onEstablished != null)
                        {
                            base.onEstablished();
                        }
                    }
                    else if (base.onPacket != null)
                    {
                        base.onPacket(message.Data, message.LengthBytes - 1, 1, (int)message.DeliveryMethod);
                    }
                    goto Label_0498;
Label_03F7:
                    if (this._state == MPPeer.PeerState.Established)
                    {
                        if (this.isServer)
                        {
                            messageType = message.MessageType;
                            if ((messageType != NetIncomingMessageType.StatusChanged) && (messageType == NetIncomingMessageType.Data))
                            {
                                this.ServerDispatchDataEvent(message);
                            }
                        }
                        else
                        {
                            messageType = message.MessageType;
                            if (((messageType != NetIncomingMessageType.StatusChanged) && (messageType == NetIncomingMessageType.Data)) && (base.onPacket != null))
                            {
                                base.onPacket(message.Data, message.LengthBytes - 1, 1, (int)message.DeliveryMethod);
                            }
                        }
                    }
Label_0498:
                    this._lidgrenPeer.Recycle(message);
                }
            }
        }
Beispiel #14
0
 public override void Init()
 {
     this._state   = MPPeer.PeerState.Inited;
     this._peerMap = new NetConnection[7];
     this._serverConnectedPeerCount = 0;
 }