자바심화 13일

KHLee·2023년 5월 8일

자바수업

목록 보기
33/46

화면 -> dto -> 매퍼(xml) -> 매퍼인터페이스 -> 서비스 -> 테스트

form은 전송하고 다음 화면으로 넘어가야 한다.
현재화면을 유지하면서 진행하고 싶다. ajax

http는 한번 내려준 후 연결을 끊는데, 웹소켓은 계속 연결한 상태를 유지.

보내고 받고 보내고 받고가 웹소켓에서는 가능하다.


클라이언트 서버에서 웹소켓을 이용한 채팅서버에 접속을 할거야~

그럼 /receiveall로 요청을 보내는데 이 메소드는 서버에 있어~

그럼 서버에서 receiveall이 동작하고 /send로 뿌려줘~
그런데 /send 같은 경우는 웹소켓에 접속한 모든 아이피에 뿌려줄거야~

sendme는?

나에게만 보낼거야~
서버 컨트롤러에서도 /send+id로 뿌릴건데,
클라이언트 측에서는 /send+cid로 오는거는 내가 받을거야~ 가됨.


enableSimpleBroker 의 첫번째 매개변수는 inbound, 두번째 매개변수는 outbound로 보낼 때 사용하는 경로임.

컨트롤러에서 /send를 이용해 보냄.


전송할 Msg의 구성요소.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>

<script>
    let pic = {
        myVideoStream:null,
        init:function(){
            this.myVideoStream = document.querySelector('#myVideo');
            $('#cfr_btn').click(function(){
                $('#cfr_form').attr({
                    'method':'post',
                    'action':'/cfrimpl'
                });
                $('#cfr_form').submit();
            });
        },
        getVideo:function(){
            navigator.getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
            navigator.getMedia(
                {video: true, audio: false},
                function(stream) {
                    pic.myVideoStream.srcObject = stream
                    pic.myVideoStream.play();
                },
                function(error) {
                    alert('webcam not working');
                });
        },
        takeSnapshot:function(){
            var myCanvasElement = document.querySelector('#myCanvas');
            var myCTX = myCanvasElement.getContext('2d');
            myCTX.drawImage(this.myVideoStream, 0, 0, myCanvasElement.width, myCanvasElement.height);
        },
        send:function(){
            const canvas = document.querySelector('#myCanvas');
            const imgBase64 = canvas.toDataURL('image/jpeg', 'image/octet-stream');
            const decodImg = atob(imgBase64.split(',')[1]);
            let array = [];
            for (let i = 0; i < decodImg .length; i++) {
                array.push(decodImg .charCodeAt(i));
            }
            const file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
            const fileName = 'snapshot_' + new Date().getMilliseconds() + '.jpg';
            let formData = new FormData();
            formData.append('file', file, fileName);
            $.ajax({
                type: 'post',
                url: '/saveimg/',
                enctype: 'multipart/form-data',
                cache: false,
                data: formData,
                processData: false,
                contentType: false,
                success: function (data) {
                    $('#imgname').val(data);
                }
            });
        },
        takeAuto:function(interval){
            this.getVideo();
            myStoredInterval = setInterval(function(){
                pic.takeSnapshot();
                pic.send();
            }, interval);
        }
    };
    $(function(){
        pic.init();
    });
</script>
<div class="col-sm-8 text-left">
    <h1>Pic</h1>
    <hr>
    <video  id="myVideo" width="400" height="300" style="border: 1px solid #ddd;"></video>
    <canvas id="myCanvas" width="160" height="140" style="border: 1px solid #ddd;"></canvas><br>
    <input type=button value="get Video" onclick="pic.getVideo();">
    <input type=button value="get Pic" onclick="pic.takeSnapshot();">
    <input type=button value="send Pic" onclick="pic.send();"><br>
    <input type=button value="Auto Pic" onclick="pic.takeAuto(5000);">
    <form id="cfr_form">
        Image Name:<input type="text" name="imgname" id="imgname"><br>
        <button id="cfr_btn">CFR</button>
    </form>
</div>

사진촬영, 자동촬영, 보내기

profile
안녕하세요

0개의 댓글