コード例 #1
0
    private void OnReceive(object o, SocketAsyncEventArgs args)
    {
        if (args.BytesTransferred == 0)
        {
            return;
        }

        try
        {
            if (args.SocketError != SocketError.Success)
            {
                Debug.Log("[Client][" + DateTime.Now + "] SocketError " + args.SocketError);
                return;
            }

            EndPoint endPoint = args.RemoteEndPoint;
            NetworkSettings.ServiceType serviceType = (NetworkSettings.ServiceType)args.Buffer[0];
            byte[] buffer = new byte[args.BytesTransferred - 1];
            Array.Copy(args.Buffer, 1, buffer, 0, args.BytesTransferred - 1);

            lastContactWithServer = DateTime.Now;
            switch (serviceType)
            {
            case NetworkSettings.ServiceType.PING:
                OnPing();
                break;

            case NetworkSettings.ServiceType.PONG:
                break;

            case NetworkSettings.ServiceType.CONNECT:
                OnConnect(buffer);
                break;

            case NetworkSettings.ServiceType.LOBBY:
                OnLobby();
                break;

            case NetworkSettings.ServiceType.GAMEUPDATE:
                OnGameUpdate(buffer);
                break;

            default:
                Debug.Log("[Server][" + DateTime.Now + "] BadServiceType " + serviceType + "=" + args.Buffer[0]);
                break;
            }
        }
        catch (Exception e)
        {
            Debug.Log("[Client][" + DateTime.Now + "] Exception " + e);
        }
    }
コード例 #2
0
    public void SEND(NetworkSettings.ServiceType serviceType, byte[] buffer = null)
    {
        if (buffer == null)
        {
            socket.SendTo(new byte[] { (byte)serviceType }, socket.RemoteEndPoint);
            return;
        }

        byte[] outBuffer = new byte[1 + buffer.Length];
        outBuffer[0] = (byte)serviceType;
        buffer.CopyTo(outBuffer, 1);
        socket.SendTo(outBuffer, socket.RemoteEndPoint);
    }