Newer
Older
DTRAMServer / src / main / java / com / example / test / dtram / Dtram.java
@Sakoda2269 Sakoda2269 on 17 Sep 2024 2 KB buttonのみhtmlの更新に成功
package com.example.test.dtram;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import org.springframework.stereotype.Component;

import models.algebra.Expression;
import models.algebra.InvalidMessage;
import models.algebra.ParameterizedIdentifierIsFutureWork;
import models.algebra.UnificationFailed;
import models.algebra.ValueUndefined;
import models.dataConstraintModel.ChannelMember;
import models.dataConstraintModel.ResourcePath;
import models.dataFlowModel.DataTransferChannel;
import models.dataFlowModel.DataTransferModel;
import models.dataFlowModel.ResolvingMultipleDefinitionIsFutureWork;
import parser.Parser;
import parser.exceptions.ExpectedColon;
import parser.exceptions.ExpectedRightBracket;
import parser.exceptions.WrongJsonExpression;
import simulator.Event;
import simulator.Simulator;
import simulator.interfaces.html.HtmlPresenter;
import simulator.interfaces.html.IWebSocketMessageSender;

@Component
public class Dtram {
	
	File file;
	DataTransferModel model;
	Simulator simulator;
	
	private final IWebSocketMessageSender ws;
	
	HtmlPresenter presenter;
	
	Dtram(IWebSocketMessageSender ws){
		this.ws = ws;
	}
	
	public void initModel(String path) {
		file = new File(path);
		try {
			Parser parser = new Parser(new BufferedReader(new FileReader(file)));
			model  = parser.doParse();
			model.getInputChannel("Init");
		}catch(Exception e) {
			
		}
	}
	
	public void startSimulator() {
		simulator = new Simulator(model);
		simulator.init();
		presenter = new HtmlPresenter(simulator, ws);
		System.out.println(simulator.getCurState().getResource("screen.widgets"));
		try {
			Parser.TokenStream stream = new Parser.TokenStream();
			Parser p = new Parser(stream);
			stream.addLine("init(\"\")");
			Expression eventMessage = p.parseTerm(stream, model);
			
			ResourcePath eventResPath = null;
			DataTransferChannel initChannel = (DataTransferChannel) model.getInputChannel("Init");
			for(ChannelMember out: initChannel.getOutputChannelMembers()) {
				eventResPath = out.getResource();
			}
			Event newEvent = new Event(initChannel, eventMessage, eventResPath, simulator.getCurState().getResource("screen.widgets"));
			simulator.transition(newEvent);
			
		} catch (ExpectedRightBracket | WrongJsonExpression | ExpectedColon | 
				ParameterizedIdentifierIsFutureWork | ResolvingMultipleDefinitionIsFutureWork | InvalidMessage | UnificationFailed | ValueUndefined e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
	
	
	
	
	
	
}